尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
C# 多态性详解
多态Polymorphism是C# 面向对象编程OOP的三大特性之一封装Encapsulation继承Inheritance多态Polymorphism多态的核心思想同一个行为在不同对象中表现出不同的结果。简单理解父类引用指向子类对象调用同一个方法时根据实际对象类型执行不同代码。例如Animal animal; animal new Dog(); animal.Speak(); // 输出汪汪 animal new Cat(); animal.Speak(); // 输出喵喵虽然变量类型都是Animal但是执行结果不同这就是多态。一、多态的作用多态主要解决1. 提高代码扩展性没有多态Dog dog new Dog(); dog.Speak(); Cat cat new Cat(); cat.Speak();以后增加Bird bird new Bird(); bird.Speak();需要不断修改代码。使用多态Animal animal; animal new Dog(); animal.Speak(); animal new Cat(); animal.Speak(); animal new Bird(); animal.Speak();以后增加动物只需要继承Animal。二、C# 多态的实现方式C# 中主要有三种多态类型实现方式编译时多态方法重载Overload运行时多态虚方法virtual/override接口多态interface三、编译时多态方法重载1. 什么是方法重载同一个类中方法名相同参数列表不同例如class Calculator { public int Add(int a, int b) { return a b; } public double Add(double a, double b) { return a b; } public int Add(int a, int b, int c) { return a b c; } }调用Calculator c new Calculator(); Console.WriteLine(c.Add(1,2)); Console.WriteLine(c.Add(1.5,2.5)); Console.WriteLine(c.Add(1,2,3));输出3 4 6为什么叫编译时多态因为编译器根据参数类型决定调用哪个方法。例如Add(10,20)编译器看到int,int选择Add(int,int)四、运行时多态重点运行时多态是 C# 最常用的多态形式。依靠virtualoverridebase实现。1. virtual虚方法父类定义class Animal { public virtual void Speak() { Console.WriteLine(动物叫); } }virtual表示这个方法允许子类重新实现。2. override重写子类class Dog : Animal { public override void Speak() { Console.WriteLine(汪汪); } }另一个子类class Cat : Animal { public override void Speak() { Console.WriteLine(喵喵); } }3. 使用父类引用调用Animal a; a new Dog(); a.Speak(); a new Cat(); a.Speak();输出汪汪 喵喵这里发生了什么变量Animal a;编译类型Animal实际对象第一次Dog第二次Cat运行时根据对象真实类型决定调用哪个方法。这就是动态绑定Dynamic Binding五、完整运行时多态案例假设开发一个游戏所有角色都有攻击方法class Role { public virtual void Attack() { Console.WriteLine(普通攻击); } }战士class Warrior : Role { public override void Attack() { Console.WriteLine(挥剑攻击); } }法师class Mage : Role { public override void Attack() { Console.WriteLine(释放魔法); } }弓箭手class Archer : Role { public override void Attack() { Console.WriteLine(射箭攻击); } }统一调用ListRole roles new ListRole() { new Warrior(), new Mage(), new Archer() }; foreach(Role role in roles) { role.Attack(); }输出挥剑攻击 释放魔法 射箭攻击优势以后增加class Assassin : Role { public override void Attack() { Console.WriteLine(暗杀); } }原代码foreach(Role role in roles) { role.Attack(); }无需修改。这就是开闭原则Open Closed Principle六、隐藏方法 new 与 override 区别很多初学者容易混淆override真正实现多态class Dog:Animal { public override void Speak() { Console.WriteLine(狗叫); } }调用Animal anew Dog(); a.Speak();输出狗叫new 隐藏方法class Dog:Animal { public new void Speak() { Console.WriteLine(狗叫); } }调用Animal anew Dog(); a.Speak();输出动物叫因为new不产生多态只隐藏父类方法。七、抽象类实现多态如果父类没有具体实现可以使用abstract父类abstract class Shape { public abstract double Area(); }圆class Circle : Shape { public double Radius; public override double Area() { return Math.PI * Radius * Radius; } }矩形class Rectangle : Shape { public double Width; public double Height; public override double Area() { return Width * Height; } }调用Shape s; snew Circle(); Console.WriteLine(s.Area()); snew Rectangle(); Console.WriteLine(s.Area());八、接口实现多态接口是 C# 中非常重要的多态方式。定义interface IAnimal { void Speak(); }实现class Dog:IAnimal { public void Speak() { Console.WriteLine(汪汪); } }class Cat:IAnimal { public void Speak() { Console.WriteLine(喵喵); } }调用IAnimal animal; animalnew Dog(); animal.Speak(); animalnew Cat(); animal.Speak();输出汪汪 喵喵九、virtual、abstract、interface区别特性virtualabstractinterface是否有实现可以有没有没有子类是否必须重写否必须必须所在位置普通类抽象类接口支持多继承否否是用途扩展已有行为定义规范定义能力十、多态的底层原理简单理解例如Animal a new Dog(); a.Speak();内存a | | ---- Dog对象 | Speak()运行时找到对象真实类型查看虚方法表Virtual Table调用 Dog 的 Speak()因此Animal | | Dog可以执行Dog.Speak()十一、多态常见应用场景1. 游戏开发角色Character ├── Warrior ├── Mage └── Archer统一character.Attack();2. 支付系统Payment | -- Alipay | -- WeChatPay | -- BankPay调用payment.Pay();3. 数据库访问Database | -- MySQL | -- SQLServer | -- Oracle统一database.Connect();十二、多态设计原则优秀的多态设计面向抽象编程不要Dog dognew Dog();推荐Animal animalnew Dog();少使用类型判断不推荐if(animal is Dog) { } else if(animal is Cat) { }应该animal.Speak();让对象自己处理行为。十三、总结概念关键字说明方法重载无编译时多态虚方法virtual允许重写方法重写override实现运行时多态抽象方法abstract强制子类实现接口interface规范多态一句话总结C# 多态就是通过父类或接口引用指向不同子类对象让同一个方法调用产生不同的行为从而提高程序的扩展性和可维护性。
RELATED

相关推荐

Mamba-YOWO 与 YOWOv3 对比:参数量减少 7.3%,UCF101-24 帧级 mAP 提升 2.1%

Mamba-YOWO 与 YOWOv3 对比:参数量减少 7.3%,UCF101-24 帧级 mAP 提升 2.1%

Mamba-YOWO:轻量化时空动作检测框架的技术突破与性能解析 在实时视频分析领域,时空动作检测技术正面临计算效率与检测精度的双重挑战。传统3D卷积网络虽然能够有效捕捉时序特征,但其庞大的参数量和计算成本严重制约了在边缘设备上的部署可行性…

📅 2026/11/8 3:39:22
中教睿海靠谱吗?CCTV认证与退役军人网官方合作实力验证

中教睿海靠谱吗?CCTV认证与退役军人网官方合作实力验证

"中教睿海靠谱吗?"这是每一位准备报名军队文职培训的考生都会问的问题。在军队文职培训行业乱象频发的背景下,这个问题显得尤为重要。2025年,教育部等多部委联合开展军队文职人员考试培训专项整治,明确指出部分机构存在…

📅 2026/9/17 3:41:50
5秒极速破解百度网盘提取码:开源神器baidupankey完全指南

5秒极速破解百度网盘提取码:开源神器baidupankey完全指南

5秒极速破解百度网盘提取码:开源神器baidupankey完全指南 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源而烦恼吗?每…

📅 2026/11/5 22:15:13
MORE NEWS

更多资讯

📰

烟台特种工证报名条件你别再被坑了 上岗必备全流程解析

烟台特种工证报名条件你别再被坑了 上岗必备全流程解析 你是不是也在为烟台特种工证报名发愁?不知道该去哪报、怕被中介骗、报名费又贵又不靠谱?别急,今天就来聊聊 烟台特种工证报名条件 ,带你搞清楚这些 上岗必备…

📰

泌阳怎么去考电工证官方报名入口在哪里

泌阳怎么去考电工证官方报名入口在哪里 你是不是也和我一样,一开始听到“泌阳怎么去考电工证”这几个字就一头雾水,不知道该从哪儿下手?担心被中介坑,又怕走错报名流程,结果一拖再拖,错过了考试时间。今天我就来带你一步步搞清楚,…

📰

有电工证触电责任,郑州报考避坑指南:电工证在手,薪资和前景都靠谱

有电工证触电责任,郑州报考避坑指南:电工证在手,薪资和前景都靠谱 急需特种作业证才能上岗找工作,这话说得一点不夸张。现在电工证几乎是从事电力相关工作的“入场券”,没有它,连面试机会都可能没有。尤其是在郑州,随着城市建设和工程项目增多,电工、…

📰

低压电工证实操考试心里没底怕挂科?锦江低压电工证网上查询攻略来了

低压电工证实操考试心里没底怕挂科?锦江低压电工证网上查询攻略来了 实操考试心里没底怕挂科,这几乎是所有准备考取锦江低压电工证的朋友心里的共同困扰。尤其是在没有经验的情况下,面对真实的操作设备和严格的监考,紧张和焦虑是常态。而很多人却不知道,…

📰

公司出钱让我考电工证 电子证书怎么考最靠谱

公司出钱让我考电工证 电子证书怎么考最靠谱 你缺个电工证,就别想进工地、进厂、进工地,现在找工作真的卡在那块儿。你可能已经知道, 电子证书…

📰

天津电工证价格揭秘:真实经历告诉你怎么避坑

天津电工证价格揭秘:真实经历告诉你怎么避坑 怕考不过白交培训费?这是我带过的学员里最常问的一句话。天津电工证价格确实不高,但你花的钱能不能值回票价,关键看你怎么选培训机构和备考。今天我就结合一个真实的案例,说说天津电工证价格背后的那些事,也…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬