[C#] ——多态和虚方法
今天只有一个核心搞懂 override 为什么不能漏。这是 C 转 C# 最隐蔽的坑。一、 虚方法 virtual —— 这块和 C 几乎一样// C class Animal { public: virtual void Speak() { cout ...; } // 标记可重写 }; // C# —— 关键字、含义都一样 class Animal { public virtual void Speak() Console.WriteLine(...); } virtual 「我这个方法允许子类重写」二、 重写 override —— 坑在这重点看2.1C 和 C# 的关键差异/ C基类 virtual 了子类同名函数【自动】多态 class Dog : public Animal { public: void Speak() { cout 汪; } // 加不加 override 都多态C11 的 override 只是可选校验 }; // C#子类必须【显式写 override】否则不参与多态 class Dog : Animal { public ovvride void speak() Console.WriteLine($汪汪汪); public void speak() Console.WriteLine($汪汪汪); //这是方法隐藏不是多态 }一句话记住C 是「默认多态override 可选」C# 是「override 必填不写就不多态」。2.2为什么 C# 这么设计C 那套「子类同名自动多态」有个经典 bug你基类没写 virtual子类碰巧写了个同名函数结果意外触发或没触发多态行为反直觉。C# 选择了显式安全想多态基类写 virtual子类写 override两边都要明说。少一个都不行。编译器帮你把关。四、 抽象类 abstract —— ≈ C 纯虚函数// C含纯虚函数 抽象类不可实例化 class Shape { public: virtual double Area() 0; // 纯虚 }; // C#abstract 关键字 abstract class Shape { public abstract double Area(); // 抽象方法无方法体子类必须 override public void Describe() Console.WriteLine($面积{Area():F2}); // 可含具体方法 }概念CC#抽象类含 0 的 classabstract class抽象方法virtual ... 0abstract ...;无方法体不可实例化是是new Shape() 编译错误子类必须实现是是必须 override4.1virtual vs abstract 选哪个基类有默认实现、子类可改可不改 → virtual基类不知道怎么实现、子类必须实现 → abstract这点 C C# 一致。五、 对照表维度CC#备注虚方法virtualvirtual一样重写同名即可override 可选必须 override⚠️ 核心差异方法隐藏隐式按静态类型new 显式声明C# 特有抽象类含 0abstract class语义一致抽象方法virtual ... 0abstract...;语义一致// Day04 练习多态与虚方法 // 核心坑C# 子类重写必须显式写 override否则是「方法隐藏 new」、不参与多态 using System; using System.Collections.Generic; // ---------- 1. 虚方法 virtual ---------- class Animal { public string Name { get; } public Animal(string name) Name name; // virtual标记此方法可被重写。C 也是 virtual几乎一样 public virtual void Speak() Console.WriteLine(${Name}: ...动物叫声); } // ---------- 2. 重写 override —— 多态的关键 ---------- class Dog : Animal { public Dog(string name) : base(name) { } // override必须显式写少了它就不是多态见下方 Puppy 反例 public override void Speak() Console.WriteLine(${Name}: 汪汪); } class Cat : Animal { public Cat(string name) : base(name) { } public override void Speak() Console.WriteLine(${Name}: 喵); } // ---------- 3. 反例方法隐藏 new不的多态 ---------- class Puppy : Dog { public Puppy(string name) : base(name) { } // 故意不写 override用 new「隐藏」基类方法 public new void Speak() Console.WriteLine(${Name}: 呜呜小狗奶音); } // ---------- 4. 抽象类 abstract ---------- // C 等价含纯虚函数 virtual ... 0 的 class不可实例化 abstract class Shape { public abstract double Area(); // 抽象方法无实现子类必须 override public void Describe() Console.WriteLine($面积 {Area():F2}); // 抽象类可含具体方法 } class Square : Shape { public double Side { get; } public Square(double side) Side side; public override double Area() Side * Side; // 必须实现抽象方法 } // ---------- 5. 主程序 ---------- class Program { static void Main() { // 多态基类引用装子类对象 ListAnimal zoo new() { new Dog(旺财), new Cat(咪咪), new Puppy(小黑) // Puppy 是 Dog 子类 }; Console.WriteLine( 动物园多态叫声 ); foreach (var a in zoo) { a.Speak(); // 同样 a.Speak()不同对象不同行为 多态 } // 踩坑Puppy 的 new 隐藏不参与多态 Console.WriteLine(\n override vs new 踩坑 ); Animal aPuppy new Puppy(小黑); // 基类引用指向 Puppy aPuppy.Speak(); // 输出汪汪而非呜呜 —— new 不多态沿继承链找到 Dog 的 override Console.WriteLine(只有用 Puppy 类型引用才听到奶音); Puppy p new Puppy(小黑); p.Speak(); // 编译期类型是 Puppy调用隐藏版本 → 呜呜 // 抽象类 Console.WriteLine(\n 抽象类 ); ListShape shapes new() { new Square(4), new Square(2.5) }; foreach (var s in shapes) { s.Describe(); // 具体方法内部多态调用 Area() } // Shape s new Shape(); // ❌ 编译错误抽象类不能实例化 } }

相关新闻

C++ vector<vector<int>> 二维动态数组:从内存模型到实战优化

C++ vector<vector<int>> 二维动态数组:从内存模型到实战优化

1. 项目概述&#xff1a;为什么你需要掌握 vector<vector<int>> 在C的日常开发里&#xff0c;尤其是处理算法、游戏逻辑或者数据科学相关的任务时&#xff0c;我们经常会遇到一个看似简单却暗藏玄机的问题&#xff1a;如何高效地表示一个二维表格、一个矩阵&…

2026/7/30 15:15:38 阅读更多 →
Senparc.AI + MCP 如何完成网页端的代码推荐生成服务。 在相关过程中,我们已经提前看到了 MCP(SSE)的相关 e ...

Senparc.AI + MCP 如何完成网页端的代码推荐生成服务。 在相关过程中,我们已经提前看到了 MCP(SSE)的相关 e ...

Senparc.AI MCP 如何完成网页端的代码推荐生成服务 引言在现代Web开发中&#xff0c;代码推荐和智能生成已成为提升开发效率的关键工具。本文将深入探讨如何结合 Senparc.AI 与 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;实现一个网页端的…

2026/7/30 15:15:38 阅读更多 →
用AI降重导致AI率飙升?2026年查重与AIGC检测原理分析

用AI降重导致AI率飙升?2026年查重与AIGC检测原理分析

明明查重率已经降到20%以下了&#xff0c;信心满满去做AI检测&#xff0c;结果AIGC率飙到50%甚至更高——这种"查重过了但AI没过"的情况&#xff0c;2026年毕业季简直太常见了。 很多同学第一反应是&#xff1a;我又没全篇用AI写&#xff0c;怎么就被查出来了&#x…

2026/7/30 15:14:38 阅读更多 →

最新新闻

央国企常用的电子招采平台有哪些?2026年第三方交易平台梳理

央国企常用的电子招采平台有哪些?2026年第三方交易平台梳理

2026年2月&#xff0c;国家八部委联合印发《关于加快招标投标领域人工智能推广应用的实施意见》&#xff0c;明确了招标文件智能检测、AI辅助评标、围串标智能识别等数字化场景的落地节奏。与此同时&#xff0c;远程异地评标和“双盲”评审改革在全国范围内加速推进。在这一政策…

2026/7/30 15:23:41 阅读更多 →
Excel图片动态绑定与双击编辑:VBA实现单元格关联与快速编辑

Excel图片动态绑定与双击编辑:VBA实现单元格关联与快速编辑

1. 从静态到动态&#xff1a;Excel图片管理的进阶需求 在日常的报表制作、数据看板或者简单的信息整理中&#xff0c;我们经常需要在Excel里插入图片。最常见的操作就是“插入”->“图片”&#xff0c;然后手动调整大小&#xff0c;把它放在某个单元格旁边。但这种做法有个很…

2026/7/30 15:23:41 阅读更多 →
从零构建AOSP内核:实战指南与深度调试

从零构建AOSP内核:实战指南与深度调试

1. 项目缘起&#xff1a;为什么我要自己构建AOSP内核&#xff1f; 在Android开发或者系统定制的圈子里&#xff0c;折腾AOSP&#xff08;Android Open Source Project&#xff09;源码几乎是每个想深入底层的人的必经之路。但很多时候&#xff0c;我们的关注点都放在了应用框架…

2026/7/30 15:23:41 阅读更多 →
amis低代码框架:JSON配置实现企业级监控告警系统,降低80%运维成本

amis低代码框架:JSON配置实现企业级监控告警系统,降低80%运维成本

amis低代码框架&#xff1a;JSON配置实现企业级监控告警系统&#xff0c;降低80%运维成本 【免费下载链接】amis 前端低代码框架&#xff0c;通过 JSON 配置就能生成各种页面。 项目地址: https://gitcode.com/GitHub_Trending/am/amis 在数字化转型浪潮中&#xff0c;企…

2026/7/30 15:23:41 阅读更多 →
OpenCore完整安装指南:从零开始在Windows上打造稳定Hackintosh系统

OpenCore完整安装指南:从零开始在Windows上打造稳定Hackintosh系统

OpenCore完整安装指南&#xff1a;从零开始在Windows上打造稳定Hackintosh系统 【免费下载链接】OpenCore-Install-Guide Repo for the OpenCore Install Guide 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Install-Guide 想要在普通PC上体验原汁原味的macOS…

2026/7/30 15:23:41 阅读更多 →
2026论文爆款降AI率平台大曝光:智能算法直击安全阈值

2026论文爆款降AI率平台大曝光:智能算法直击安全阈值

2026年的学术战场早已不是从前的模样。过去那种只要把查重率压下去就能安心交稿的日子一去不复返&#xff0c;现在的学生和科研人员正被一场前所未有的“降AI”风暴推入深渊。随着AI检测技术的不断迭代&#xff0c;高校对论文的审查标准也变得愈发严苛&#xff0c;连最基础的“…

2026/7/30 15:22:41 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具&#xff1a;DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼&#xff1f;是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper&#xff1a;网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具&#xff0c;它并非替代教师&#xff0c;而是通过语义理解、知识图谱与多模态生成能力&#xff0c;将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档&#xff0c;可以直接使用&#xff01;系统支持图片、视频、摄像头等多种方式检测裂缝&#xff0c;功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像&#xff01; pubg绝地求生目标检测数据集 1分类&#xff1a;e_body&#xff0c;14905个标签&#xff0c;txt格式 共计14244张图&#xff0c;99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别&#xff1a; allies enemy tag图片总量&#xff1a;7247张训练集&#xff1a;5139张验证集&#xff1a;1425张测试集&#xff1a;683张标注状态&#xff1a;全部已标注&#xff0c;即拿即用数据格式&#xff1a;支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻