新闻详情

新闻详情

首页 / 资讯中心 / 详情

C# 面向对象核心:一文吃透多态(静态多态 + 动态多态完整讲解)

发布时间:2026/9/25 23:05:30来源:尧图网络
C# 面向对象核心:一文吃透多态(静态多态 + 动态多态完整讲解)
前言封装、继承、多态是面向对象编程三大基石前面我们学习了封装隐藏数据、继承复用代码而多态是继承体系的最终落地也是让代码具备高扩展性的关键特性。很多初学者分不清静态多态与动态多态也不理解多态到底解决了什么开发痛点今天结合通俗易懂的比喻 完整可运行案例从零拆解多态全部知识点。一、什么是多态1. 通俗理解同一个类型不同行为多态字面含义多种形态。核心定义同一个父类引用指向不同子类实例调用同名方法时执行各自子类独有的逻辑。举个生活化例子所有酒水都属于 “酒”父类剑南春、五粮液、酒鬼酒都是酒的子类。plaintext酒 a 剑南春 酒 b 五粮液 酒 c 酒鬼酒编译时只知道变量是 “酒”只有运行时喝下去才能分辨具体是哪一款酒每一种酒口感不同对应代码里就是同名方法执行不同逻辑这就是多态。2. 专业定义程序中父类引用变量指向的具体对象、方法调用逻辑编译阶段无法确定运行时才判定。无需修改原有业务代码就能切换不同子类实现一套引用适配多种实体让程序拥有多种运行状态。二、为什么要使用多态从反面案例看懂痛点我们用 QQ 宠物场景举例直观感受没有多态时代码的缺陷。1. 初始版本无继承、无多态代码极度冗余分别创建猫、狗两个独立类各自拥有Eat()进食方法主人类需要单独写喂猫、喂狗两个方法。public class Cat { public string Name { get; set; } public int Health { get; set; } public void Eat() { Health 10; Console.WriteLine(喵喵喵~鱼很好吃,健康值10); } } public class Dog { public string Name { get; set; } public int Health { get; set; } public void Eat() { Health 15; Console.WriteLine(汪汪汪~骨头不错哦,健康值15); } } // 主人类 public class Lady { public string Name { get; set; } public Lady(string name) Name name; // 单独喂猫 public void FeedCat(Cat cat) cat.Eat(); // 单独喂狗 public void FeedDog(Dog dog) dog.Eat(); }调用测试static void Main(string[] args) { Lady lily new Lady(lily); Dog dog new Dog() { Name 大黄, Health 60 }; Cat cat new Cat() { Name 蓝猫, Health 50 }; lily.FeedDog(dog); lily.FeedCat(cat); }代码存在两大致命问题重复代码过多猫、狗都有Name、Health属性重复定义扩展性极差后续新增鸟类、兔子宠物必须修改Lady主人类新增FeedBird、FeedRabbit方法违背开闭原则。2. 第一次优化抽取父类抽象类复用重复代码把宠物共有属性、抽象进食方法抽成父类Pet猫狗继承并重写Eat()public abstract class Pet { public string Name { get; set; } public int Health { get; set; } // 抽象进食方法强制子类重写 public abstract void Eat(); } public class Cat : Pet { public override void Eat() { Health 10; Console.WriteLine(喵喵喵~鱼很好吃,健康值10); } } public class Dog : Pet { public override void Eat() { Health 15; Console.WriteLine(汪汪汪~骨头不错哦,健康值15); } }此时解决了代码重复问题但主人类FeedCat、FeedDog两个方法依然存在新增宠物仍要修改主人类扩展性问题没有根治。3. 终极优化引入多态一套方法适配所有宠物利用父类引用接收所有子类对象主人只保留一个通用喂养方法public class Lady { public string Name { get; set; } public Lady(string name) Name name; // 父类Pet作为参数兼容所有Pet子类 public void Feed(Pet pet) { pet.Eat(); } }测试调用static void Main(string[] args) { Lady lily new Lady(lily); Pet dog new Dog() { Name 大黄, Health 60 }; Pet cat new Cat() { Name 蓝猫, Health 50 }; // 同一个Feed方法分别调用Dog、Cat的Eat实现 lily.Feed(dog); lily.Feed(cat); }多态带来的核心优势高扩展性新增鸟类只需要新建Bird : Pet并重写Eat()主人类代码完全不用改动代码精简统一入口方法消除大量重复业务函数解耦上层主人类只依赖抽象父类不依赖具体猫狗子类降低代码耦合。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

基于私有知识库的LLM智能客服问答系统:从RAG到私有化部署实战 2026/9/25 23:05:25

基于私有知识库的LLM智能客服问答系统:从RAG到私有化部署实战

简介:这套资源是基于企业私有知识库的大语言模型智能客服问答系统,支持私有化部署,主要面向企业技术团队、AI应用开发者以及需要搭建内部智能问答平台的管理者,尤其适合对数据安全有较高要求的场景。资源包共1302个文件&#xff0…

阅读更多 →
MaaEnd节点测试教程:如何用测试用例验证识别稳定命中 2026/9/25 23:05:25

MaaEnd节点测试教程:如何用测试用例验证识别稳定命中

MaaEnd节点测试教程:如何用测试用例验证识别稳定命中 【免费下载链接】MaaEnd MaaEnd 终末地小助手:基于视觉 AI 的「明日方舟:终末地」自动化工具 项目地址: https://gitcode.com/gh_mirrors/maa/MaaEnd MaaEnd 是基于视觉 AI 的《明…

阅读更多 →
Dora 分布式部署指南:多机集群、标签调度、滚动升级与 systemd 运维完整手册 2026/9/25 23:05:18

Dora 分布式部署指南:多机集群、标签调度、滚动升级与 systemd 运维完整手册

Dora 分布式部署指南:多机集群、标签调度、滚动升级与 systemd 运维完整手册 【免费下载链接】dora DORA (Dataflow-Oriented Robotic Architecture 面向数据流的机器人架构) 是为 AI 与具身智能机器人打造的高性能开发框架,以数据流范式重构开发逻辑&am…

阅读更多 →
webpack逆向补环境全流程:定位anti-content签名模块与浏览器环境模拟 2026/9/25 23:04:36

webpack逆向补环境全流程:定位anti-content签名模块与浏览器环境模拟

简介:一份以Webpack补环境为核心的拼多多anti_content参数逆向学习资料,适合具备JavaScript基础、希望进阶逆向工程的前端开发者或安全学习者。资料针对拼多多web端接口中的anti_content签名机制,梳理了利用Webpack配置与JavaScript环境补丁绕…

阅读更多 →
猫狗图像分类数据集清洗与增强实战指南 2026/9/25 23:04:36

猫狗图像分类数据集清洗与增强实战指南

1. 这个“1400张猫狗图”到底值不值得你花时间下载?我去年带三个实习生做入门级图像分类项目,第一周就卡在数据集上——他们翻遍了Kaggle、UCI和几个主流CV平台,最后在一个冷门论坛里扒出一个标着“【免费下载】猫狗图像分类数据集(1400)”的…

阅读更多 →
湖北煤矿道岔,双开道岔,盾构道岔,单开道岔优质厂家实力参考:林州市创扬矿山设备制造有限公司靠谱定制厂家推荐 2026/9/25 23:04:19

湖北煤矿道岔,双开道岔,盾构道岔,单开道岔优质厂家实力参考:林州市创扬矿山设备制造有限公司靠谱定制厂家推荐

湖北地区煤矿企业轨道改造、新建矿井轨道铺设,不少采购负责人都在打听靠谱的煤矿道岔专业制造商,想找能做煤矿道岔个性化定制厂家,不少人问起推荐一下煤矿道岔制造商哪家靠谱,今天我们就结合行业实际情况,给大家聊一聊…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉