C# 多态:面向对象编程的核心特性详解
1. 什么是多态多态Polymorphism是面向对象编程的三大特性之一封装、继承、多态它允许不同类的对象对同一消息做出不同的响应。在 C# 中多态主要通过继承和接口实现让代码更加灵活、可扩展。2. C# 中多态的实现方式2.1 编译时多态静态多态编译时多态主要通过方法重载Overloading实现public 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; } }编译器在编译时根据参数类型和数量决定调用哪个方法。2.2 运行时多态动态多态运行时多态主要通过方法重写Overriding实现使用virtual和override关键字public class Animal { public virtual void MakeSound() { Console.WriteLine(动物发出声音); } } public class Dog : Animal { public override void MakeSound() { Console.WriteLine(汪汪汪); } } public class Cat : Animal { public override void MakeSound() { Console.WriteLine(喵喵喵); } }3. 多态的实际应用示例class Program { static void Main(string[] args) { // 多态的应用 Animal myAnimal; myAnimal new Dog(); myAnimal.MakeSound(); // 输出汪汪汪 myAnimal new Cat(); myAnimal.MakeSound(); // 输出喵喵喵 // 使用基类引用调用派生类方法 Animal[] animals new Animal[3]; animals[0] new Dog(); animals[1] new Cat(); animals[2] new Animal(); foreach (Animal animal in animals) { animal.MakeSound(); } } }4. 抽象类与多态抽象类Abstract Class是实现多态的重要工具public abstract class Shape { public abstract double GetArea(); // 抽象方法 public virtual void Display() { Console.WriteLine(这是一个形状); } } public class Circle : Shape { public double Radius { get; set; } public Circle(double radius) { Radius radius; } public override double GetArea() { return Math.PI * Radius * Radius; } public override void Display() { Console.WriteLine($圆形半径{Radius}面积{GetArea():F2}); } } public class Rectangle : Shape { public double Width { get; set; } public double Height { get; set; } public Rectangle(double width, double height) { Width width; Height height; } public override double GetArea() { return Width * Height; } }5. 接口与多态接口Interface是实现多态的另一种方式支持多重继承public interface IDrawable { void Draw(); } public interface IResizable { void Resize(double factor); } public class GraphicObject : IDrawable, IResizable { public virtual void Draw() { Console.WriteLine(绘制图形对象); } public virtual void Resize(double factor) { Console.WriteLine($按比例 {factor} 调整大小); } } public class Line : GraphicObject { public override void Draw() { Console.WriteLine(绘制一条直线); } }6. 多态的优势与最佳实践6.1 主要优势代码复用通过基类或接口定义通用行为可扩展性添加新类时无需修改现有代码灵活性运行时决定调用哪个方法松耦合减少类之间的依赖关系6.2 最佳实践优先使用接口实现多态避免多重继承的复杂性合理使用virtual和override关键字考虑使用抽象类定义通用实现避免过度设计只在需要扩展的地方使用多态7. 常见问题与解决方案7.1 如何选择抽象类 vs 接口场景建议需要提供默认实现使用抽象类需要多重继承使用接口定义行为契约使用接口紧密相关的类层次使用抽象类7.2 性能考虑虚方法调用比非虚方法调用稍慢但在大多数应用中影响可以忽略不计。只有在性能关键的代码路径中才需要考虑使用sealed关键字。8. 总结C# 多态是面向对象编程的核心特性通过方法重载、方法重写、抽象类和接口等多种方式实现。合理使用多态可以显著提高代码的可维护性、可扩展性和灵活性。在实际开发中应根据具体需求选择合适的多态实现方式并遵循最佳实践原则。

相关新闻

提示词工程精简版

提示词工程精简版

提示词工程学习教程:从入门到实战 一、什么是提示词工程 提示词工程,就是通过设计清晰、完整、可验证的指令,让人工智能更稳定、更准确地完成任务。 它不是简单地“把问题说得更长”,而是要解决以下问题: 1. 让模型…

2026/10/18 12:39:48 阅读更多 →
低成本步进电机云台方案:从结构设计到Arduino控制全解析

低成本步进电机云台方案:从结构设计到Arduino控制全解析

在嵌入式开发与机器人控制领域,云台是实现精准指向、目标追踪的核心执行机构。无论是电赛中的视觉追踪项目,还是日常的DIY监控、自动对焦系统,一个稳定、响应快且成本可控的云台方案都是成功的关键。然而,市面上的成品云台要么价格…

2026/10/20 2:57:20 阅读更多 →
AWS亚马逊云注册:结合 AI 预测模型与 KEDA,实现 K8s 极致弹性调度

AWS亚马逊云注册:结合 AI 预测模型与 KEDA,实现 K8s 极致弹性调度

KEDA流量预测弹性调度实践 很多团队把HPA(Horizontal Pod Autoscaler)当成Kubernetes弹性伸缩的标配,却总在流量波峰到来时发现Pod启动慢、指标反应迟钝,导致请求排队甚至超时。KEDA流量预测弹性调度实践要解决的,正是…

2026/10/19 19:06:10 阅读更多 →

最新新闻

基于垂向加速度与MLP神经网络的路面摩擦系数估计

基于垂向加速度与MLP神经网络的路面摩擦系数估计

最近在做一个车辆底盘控制相关的项目,核心目标之一是实时估计路面附着上限,也就是轮胎和路面之间的最大摩擦系数(Tire-Road Friction Coefficient,简称TRFC)。这东西在ABS、ESP、自动紧急制动里都是关键变量&#xff0…

2026/10/20 2:56:47 阅读更多 →
基于C#的多品牌PLC统一监控与智能报警系统设计实践

基于C#的多品牌PLC统一监控与智能报警系统设计实践

第一次走进某工厂的机柜间,我看到的不是一排整齐划一的控制器,而是三套互不联通的监控系统。产线A用的是西门子的控制器,产线B是三菱的,配电间还挂着一台只负责读电表的组态软件。设备工程师处理故障时,要挨个切换窗口…

2026/10/20 2:56:47 阅读更多 →
ok-ww 完整指南:鸣潮后台自动战斗、一键日常与声骸刷取的配置避坑手册

ok-ww 完整指南:鸣潮后台自动战斗、一键日常与声骸刷取的配置避坑手册

ok-ww 完整指南:鸣潮后台自动战斗、一键日常与声骸刷取的配置避坑手册 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves …

2026/10/20 2:56:47 阅读更多 →
MCP协议实战:从原理到构建AI工具调用Server的全指南

MCP协议实战:从原理到构建AI工具调用Server的全指南

这篇笔记是我在连续研究了大半个月MCP(Model Context Protocol,模型上下文协议)之后整理出来的。说实话,第一次看到这个缩写我还以为是某个消息通信协议的缩写,深入进去才发现,这根本就是大模型应用开发的一…

2026/10/20 2:56:47 阅读更多 →
科技商业史复盘:社交收购、5G芯片发布与PC并购的底层逻辑

科技商业史复盘:社交收购、5G芯片发布与PC并购的底层逻辑

时间是一个很奇妙的东西。翻看科技行业的商业史,你会发现很多标志性事件的节点往往挤在同一天。9月6日这一天,就曾经同时落下过三颗足以改变行业走向的棋子:一起改变社交生态的超级收购、一次重新定义移动通信能力的旗舰芯片发布、一桩重塑计…

2026/10/20 2:56:47 阅读更多 →
TensorRT实战手册:GPU推理优化与INT8量化完整指南

TensorRT实战手册:GPU推理优化与INT8量化完整指南

要说GPU推理优化,TensorRT是绕不过去的那一个。框架跑训练、TensorRT做上线推理,这个分工在工业级落地里已经成了默认组合。简单讲,TensorRT是一个专攻推理阶段的高性能优化引擎,它把训练好的模型拿到手,通过层融合、精…

2026/10/20 2:55:46 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →