新闻详情

新闻详情

首页 / 资讯中心 / 详情

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

发布时间:2026/10/29 18:58:17来源:尧图网络
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

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/28 16:06:12

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/28 13:44:36

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/29 13:36:24

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/28 16:06:11

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/29 13:36:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/28 16:06:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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