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/8/11 7:32:38 阅读更多 →
低成本步进电机云台方案:从结构设计到Arduino控制全解析

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

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

2026/8/11 7:32:38 阅读更多 →
MATLAB多式联运路径优化:AFO、GA、PSO与全局优化工具箱对比实践

MATLAB多式联运路径优化:AFO、GA、PSO与全局优化工具箱对比实践

上周帮一个做物流规划的朋友看代码,他手里有个多式联运路径优化的项目,数据量不大但约束条件复杂,跑了几次结果都不太理想。他问我:“是不是算法没选对?我试了遗传算法和粒子群,结果有时候好有时候坏&#…

2026/8/11 7:32:38 阅读更多 →

最新新闻

Ubuntu 20.04 LTS 从安装到优化:一份面向新手的完整实战指南

Ubuntu 20.04 LTS 从安装到优化:一份面向新手的完整实战指南

1. 项目概述:为什么Ubuntu 20.04 LTS依然是当下的明智之选 如果你正准备踏入Linux世界,或者想为你的旧电脑寻找一个轻快、现代的操作系统,那么Ubuntu 20.04 LTS(Focal Fossa)绝对是一个绕不开的经典选项。即便在更新的…

2026/8/11 8:17:55 阅读更多 →
Godot PCK文件深度解析:从资源打包到热更新实战指南

Godot PCK文件深度解析:从资源打包到热更新实战指南

1. 项目概述与核心价值如果你正在用Godot做游戏,尤其是涉及到资源管理、热更新或者想对游戏包体进行深度分析,那你肯定绕不开.pck文件。这玩意儿就是Godot用来打包所有游戏资源(场景、脚本、图片、音频等等)的容器。官方提供了God…

2026/8/11 8:17:55 阅读更多 →
**函数依赖(Functional Dependency, FD)** 和 **候选键(Candidate Key)** 是关系数据库理论中的核心概念

**函数依赖(Functional Dependency, FD)** 和 **候选键(Candidate Key)** 是关系数据库理论中的核心概念

在软考(尤其是数据库系统工程师、信息系统项目管理师等科目)中,函数依赖(Functional Dependency, FD) 和 候选键(Candidate Key) 是关系数据库理论中的核心概念,常出现在选择题、简答…

2026/8/11 8:17:55 阅读更多 →
会话恢复技术解析:从tmux到codexx,如何找回丢失的命令行工作状态

会话恢复技术解析:从tmux到codexx,如何找回丢失的命令行工作状态

1. 从“你和Kimi聊得太长啦”说起:为什么我们需要会话恢复不知道你有没有遇到过这种情况:正在终端里用某个命令行工具(CLI)调试一个复杂的流程,或者在一个交互式编程环境里写了大半天的代码,突然因为网络波…

2026/8/11 8:17:55 阅读更多 →
海康威视Web3.2无插件监控开发实战:WebSocket+Nginx+H5Player全解析

海康威视Web3.2无插件监控开发实战:WebSocket+Nginx+H5Player全解析

1. 项目概述:为什么我们需要“无插件”方案?如果你做过安防监控相关的Web集成,尤其是和海康威视的设备打交道,那你一定对“插件”这两个字深恶痛绝。早些年,想在网页上预览摄像头实时视频,用户必须下载并安…

2026/8/11 8:17:55 阅读更多 →
手机电池高低温测试原理与寿命预测方法

手机电池高低温测试原理与寿命预测方法

1. 电池寿命测试的行业痛点 手机电池续航能力一直是消费者最关注的性能指标之一。作为从业十年的硬件测试工程师,我见过太多因为电池问题导致的用户体验灾难——明明标注4000mAh容量的电池,用不到半年就出现"跳电"现象;冬季户外使用…

2026/8/11 8:16:55 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/10 17:07:33 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/11 1:08:06 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/10 17:07:33 阅读更多 →