[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/10/14 1:00:21 阅读更多 →
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/10/7 2:12:00 阅读更多 →
用AI降重导致AI率飙升?2026年查重与AIGC检测原理分析

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

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

2026/10/12 19:35:39 阅读更多 →

最新新闻

Vue3错误边界实战:从onErrorCaptured到组件级降级

Vue3错误边界实战:从onErrorCaptured到组件级降级

今天是我持续精进Vue3核心机制的第78天&#xff0c;正好把错误边界&#xff08;error boundary&#xff09;这块彻底通透了一遍。很多同学看到“错误边界”会联想到React的ErrorBoundary&#xff0c;其实Vue3里没有自带一个完全等价的组件&#xff0c;但提供了完整的错误捕获链…

2026/10/14 16:27:38 阅读更多 →
Docker Swarm集群部署实战:轻量高可用容器编排指南

Docker Swarm集群部署实战:轻量高可用容器编排指南

1. 项目概述&#xff1a;为什么今天还要认真学 Swarm&#xff0c;而不是直接上 Kubernetes&#xff1f;“实战Docker-Swarm集群部署”——这标题一出来&#xff0c;不少老朋友第一反应可能是&#xff1a;“Swarm&#xff1f;现在不是都用 K8s 了吗&#xff1f;”确实&#xff0…

2026/10/14 16:27:38 阅读更多 →
Tock 内核 SHA256 测试板配置:nRF52840-DK 最小 SHA256 内核的构建与驱动分析

Tock 内核 SHA256 测试板配置:nRF52840-DK 最小 SHA256 内核的构建与驱动分析

操作系统嵌入式嵌入式OS 【免费下载链接】tock A secure embedded operating system for microcontrollers 项目地址&#xff1a; https://gitcode.com/gh_mirrors/to/tock 点击查看 免费下载 nRF52840-DK SHA256 Test Board&#xff08;nrf52840dk-test-sha256&#xff09;是…

2026/10/14 16:27:38 阅读更多 →
ML307N/Y/X模组选型指南:功耗、频段与接口差异全解析

ML307N/Y/X模组选型指南:功耗、频段与接口差异全解析

1. 三款模组到底差在哪&#xff1a;一次讲透ML307系列的选型逻辑搞物联网硬件的朋友大概率都碰过同一个问题&#xff1a;项目立项时选型表上摆着好几款看起来差不多的蜂窝模组&#xff0c;封装一样、引脚兼容、价格也接近&#xff0c;但真到画板子、写驱动、跑认证的时候才发现…

2026/10/14 16:27:38 阅读更多 →
开题报告写到崩溃?毕夏AI官网这个功能,把“选题焦虑“变成了“填空题“

开题报告写到崩溃?毕夏AI官网这个功能,把“选题焦虑“变成了“填空题“

毕夏AI官网&#xff1a;www.bixiaai.com&#xff0c;微信公众号搜一搜"毕夏AI官网" 如果你正在读研&#xff0c;或者带过研究生&#xff0c;你一定见过这种场景。 一个学生坐在电脑前&#xff0c;盯着空白的Word文档&#xff0c;光标一闪一闪&#xff0c;三个小时…

2026/10/14 16:27:38 阅读更多 →
免费AI配音工具怎么选?媒小三配音与声音克隆功能介绍

免费AI配音工具怎么选?媒小三配音与声音克隆功能介绍

寻找免费 AI 配音工具时&#xff0c;很多人最关心三个问题&#xff1a;能不能免费体验、生成的声音是否自然&#xff0c;以及能否满足短视频日常创作需求。媒小三配音是一款结合 AI 配音、声音克隆和文案辅助功能的工具&#xff0c;提供网页、APP和微信小程序等使用入口。如果你…

2026/10/14 16:26:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →