news 2026/2/27 15:53:10

Visual Studio中的多态

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Visual Studio中的多态

目录

一、静态多态

1.函数重载

2.符号重载

3.静态多态的特点

二、动态多态

1.继承 + 虚方法

2.抽象类

3.动态多态的特点

4. 继承+抽象类 与 抽象类

三、静态多态 与 动态多态 的对比


多态是面向对象编程的三大特性之一,指同一行为在不同对象上表现出不同的形态。在 Visual Studio 中,多态主要分为静态多态(编译时多态)动态多态(运行时多态),二者的核心区别在于方法调用的绑定时机

一、静态多态

静态多态是指在编译阶段就确定调用哪个方法,绑定过程由编译器完成。

实现方式:

1.函数重载

在同一类中定义多个同名方法,通过参数的类型、数量或顺序区分;即在同一个范围内,函数名一样,参数类型不一样,参数个数不一样。

示例:

class Calculator

{

public int Add(int a, int b)=> a + b;

public double Add(double a, double b)=> a + b;// 参数类型不同

public int Add(int a, int b, int c)=> a + b + c;// 参数数量不同

}

2.符号重载

重定义运算符(如+-)的行为,使其支持自定义类型;即把常用的算数运算符号、逻辑运算符号按照自己定义的方式进行运算,且需要将方法定义成静态的方法,在重载的符号前添加关键字operator

示例:

public static Vector operator +(Vector a, Vector b)

{

return new Vector(a.X + b.X, a.Y + b.Y);//重载 “+” 运算符

}

3.静态多态的特点

编译时绑定:编译器根据方法签名(名称+参数)直接确定调用目标。

性能高:无需运行时类型检查,执行速度快。

灵活性低:无法动态改变行为,仅适用于编译时已知类型的场景。

二、动态多态

动态多态是指在运行阶段才确定调用哪个方法。

实现方式:

1.继承 + 虚方法

说明及特点:

父类定义virtual方法,子类用override重写。

虚成员和虚方法可以定义在普通类里面

虚成员和虚方法可以在普通类里面实现

虚成员和虚方法可以不用在派生类里面实现。

示例:

class Animal

{

public virtual void Speak()//基类 创建虚方法

{

Console.WriteLine("动物叫");

}}

class Dog : Animal//继承基类

{

public override void Speak()//派生类 虚方法 -- 重写

{

Console.WriteLine("汪汪");
} }

2.抽象类

抽象类说明及特点

用于提供类的部分成员实现,抽象类中可以包含抽象方法,也可以包含普通方法

抽象方法,不用去实现方法,谁继承这个抽象类谁去实现抽象方法

抽象类里面也可以定义抽象成员,抽象成员需要在派生类(子类)里去实现

包含abstract方法的类,子类必须实现所有抽象方法。

示例:

public abstract class People
{
public int Age { get; set; } = 10;// 普通的属性

//public abstract string Name { get; set; } = "aaa";// 抽象属性 不能赋值

public abstract string Name { get; set; }

//普通方法可以正常定义和实现
public void Eat()
{
Console.WriteLine("bbb");
}

//抽象方法不能有方法体 不能加{}
public abstract void SayHello(int a) ;
}

//在子类实现抽象成员
public class CC : People
{
//需要重写抽象成员和抽象方法,添加重写关键字 override
public override string Name { get; set; } = "ccc";

//重写抽象方法
public override void SayHello(int a)
{
Console.WriteLine("ddd");
}
}

3.动态多态的特点

运行时绑定: CLR 根据对象的实际类型(而非声明类型)决定调用哪个方法。

灵活性高: 支持动态替换行为,是实现“开闭原则”的核心手段。

性能略低需要额外的类型检查和方法表查找

4. 继承+抽象类 与 抽象类

1.抽象成员和抽象方法只能定义在抽象类里面但是虚成员和虚方法可以定义在普通类里面
2.抽象成员和抽象方法在抽象类里面不能实现但是虚成员和虚方法可以在普通类里面实现
3.抽象成员和抽象方法在派生类里面必须实现但是虚成员和虚方法可以不用在派生类里面实现
4.可以使用 override 重写基类里面的抽象方法或者虚方法

三、静态多态 与 动态多态 的对比

对比维度静态多态动态多态
绑定时机编译时运行时
实现基础方法签名(参数差异)继承、虚方法、接口
调用目标编译器确定CLR 根据对象实际类型确定
灵活性低(编译后无法修改)高(支持动态替换)
典型场景工具类方法(如Math.Abs重载)框架扩展(如插件化架构、依赖注入)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/26 10:43:44

2500线磁编码器方案:电机反馈系统的新选择

2500线磁编码器方案 电机反馈系统 ,用于交直流伺服和步进闭环,替换原来光编方案。 原理图和PCB全套文件 支持电机驱动器:迈信EP100、广数DA98、数控SD200A等 。增量ABZ差分输出,UVW差分输出,2500PPR,Z脉冲宽…

作者头像 李华
网站建设 2026/2/28 0:53:05

抓取cpu持续忙碌状态的方法

一、背景 在一些cpu资源并不是很充足的系统上,往往会出现cpu持续一段时间特别忙碌的情况,cpu持续忙碌是一个很不好的状态,可能会伴随着有些任务的调度时延变大,系统里的一些业务如果要求一定的实时性的话,这时候就会产生问题。 编写一个ko来抓取cpu的忙碌状态是有意义的…

作者头像 李华
网站建设 2026/2/24 23:59:22

华为OD机试真题 - 高效货运 (C++ Python JAVA JS GO)

高效货运 2025华为OD机试真题 - 华为OD上机考试真题 100分题型 华为OD机试真题目录点击查看: 华为OD机试真题题库目录|机考题库 + 算法考点详解 题目描述 老李是货运公司承运人,老李的货车额定载货重量为 wt。 现有两种货物: 货物 A 单件重量为 wa,单件运费利润为 pa 货…

作者头像 李华
网站建设 2026/2/25 10:23:14

揭秘多态:静态与动态的编程艺术以及多态的重载

多态//多态:同一个方法不同形态体现, //多态分静态多态和动态的多态 //静态多态:函数重载和符号重载 //动态多态:抽象和虚方法//函数重载在同一个范围内,函数名一样,参数的类型不一样、参数的个数不一样,这样函数就是重…

作者头像 李华
网站建设 2026/2/26 6:35:56

前端代码混淆,零基础入门到精通,收藏这篇就够了

目录 一、严格模式与非严格模式 二、双等于三等的区别 三、防抖和节流 四、原型和原型链 五、页面重绘和回流 六、script标签async和defer 七、普通函数和箭头函数的区别 八、JS闭包 1、闭包特点 2、闭包作用 3、闭包风险 4、运用场景 1)常见闭包 2&a…

作者头像 李华
网站建设 2026/2/23 10:42:08

电力系统概率能量预测:归一化流深度生成模型的探索

电力系统概率能量预测的深度生成模型:归一化流在电力系统领域,准确的能量预测至关重要。传统的预测方法往往难以应对复杂多变的电力需求和供应情况,而深度生成模型为这一难题带来了新的解决方案。今天,咱们就来聊聊基于归一化流的深度生成模型…

作者头像 李华