C# 多态性详解 📅 发布时间:2026/7/9 8:44:22 👁️ 浏览次数: 多态Polymorphism是C# 面向对象编程OOP的三大特性之一封装Encapsulation继承Inheritance多态Polymorphism多态的核心思想同一个行为在不同对象中表现出不同的结果。简单理解父类引用指向子类对象调用同一个方法时根据实际对象类型执行不同代码。例如Animal animal; animal new Dog(); animal.Speak(); // 输出汪汪 animal new Cat(); animal.Speak(); // 输出喵喵虽然变量类型都是Animal但是执行结果不同这就是多态。一、多态的作用多态主要解决1. 提高代码扩展性没有多态Dog dog new Dog(); dog.Speak(); Cat cat new Cat(); cat.Speak();以后增加Bird bird new Bird(); bird.Speak();需要不断修改代码。使用多态Animal animal; animal new Dog(); animal.Speak(); animal new Cat(); animal.Speak(); animal new Bird(); animal.Speak();以后增加动物只需要继承Animal。二、C# 多态的实现方式C# 中主要有三种多态类型实现方式编译时多态方法重载Overload运行时多态虚方法virtual/override接口多态interface三、编译时多态方法重载1. 什么是方法重载同一个类中方法名相同参数列表不同例如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; } }调用Calculator c new Calculator(); Console.WriteLine(c.Add(1,2)); Console.WriteLine(c.Add(1.5,2.5)); Console.WriteLine(c.Add(1,2,3));输出3 4 6为什么叫编译时多态因为编译器根据参数类型决定调用哪个方法。例如Add(10,20)编译器看到int,int选择Add(int,int)四、运行时多态重点运行时多态是 C# 最常用的多态形式。依靠virtualoverridebase实现。1. virtual虚方法父类定义class Animal { public virtual void Speak() { Console.WriteLine(动物叫); } }virtual表示这个方法允许子类重新实现。2. override重写子类class Dog : Animal { public override void Speak() { Console.WriteLine(汪汪); } }另一个子类class Cat : Animal { public override void Speak() { Console.WriteLine(喵喵); } }3. 使用父类引用调用Animal a; a new Dog(); a.Speak(); a new Cat(); a.Speak();输出汪汪 喵喵这里发生了什么变量Animal a;编译类型Animal实际对象第一次Dog第二次Cat运行时根据对象真实类型决定调用哪个方法。这就是动态绑定Dynamic Binding五、完整运行时多态案例假设开发一个游戏所有角色都有攻击方法class Role { public virtual void Attack() { Console.WriteLine(普通攻击); } }战士class Warrior : Role { public override void Attack() { Console.WriteLine(挥剑攻击); } }法师class Mage : Role { public override void Attack() { Console.WriteLine(释放魔法); } }弓箭手class Archer : Role { public override void Attack() { Console.WriteLine(射箭攻击); } }统一调用ListRole roles new ListRole() { new Warrior(), new Mage(), new Archer() }; foreach(Role role in roles) { role.Attack(); }输出挥剑攻击 释放魔法 射箭攻击优势以后增加class Assassin : Role { public override void Attack() { Console.WriteLine(暗杀); } }原代码foreach(Role role in roles) { role.Attack(); }无需修改。这就是开闭原则Open Closed Principle六、隐藏方法 new 与 override 区别很多初学者容易混淆override真正实现多态class Dog:Animal { public override void Speak() { Console.WriteLine(狗叫); } }调用Animal anew Dog(); a.Speak();输出狗叫new 隐藏方法class Dog:Animal { public new void Speak() { Console.WriteLine(狗叫); } }调用Animal anew Dog(); a.Speak();输出动物叫因为new不产生多态只隐藏父类方法。七、抽象类实现多态如果父类没有具体实现可以使用abstract父类abstract class Shape { public abstract double Area(); }圆class Circle : Shape { public double Radius; public override double Area() { return Math.PI * Radius * Radius; } }矩形class Rectangle : Shape { public double Width; public double Height; public override double Area() { return Width * Height; } }调用Shape s; snew Circle(); Console.WriteLine(s.Area()); snew Rectangle(); Console.WriteLine(s.Area());八、接口实现多态接口是 C# 中非常重要的多态方式。定义interface IAnimal { void Speak(); }实现class Dog:IAnimal { public void Speak() { Console.WriteLine(汪汪); } }class Cat:IAnimal { public void Speak() { Console.WriteLine(喵喵); } }调用IAnimal animal; animalnew Dog(); animal.Speak(); animalnew Cat(); animal.Speak();输出汪汪 喵喵九、virtual、abstract、interface区别特性virtualabstractinterface是否有实现可以有没有没有子类是否必须重写否必须必须所在位置普通类抽象类接口支持多继承否否是用途扩展已有行为定义规范定义能力十、多态的底层原理简单理解例如Animal a new Dog(); a.Speak();内存a | | ---- Dog对象 | Speak()运行时找到对象真实类型查看虚方法表Virtual Table调用 Dog 的 Speak()因此Animal | | Dog可以执行Dog.Speak()十一、多态常见应用场景1. 游戏开发角色Character ├── Warrior ├── Mage └── Archer统一character.Attack();2. 支付系统Payment | -- Alipay | -- WeChatPay | -- BankPay调用payment.Pay();3. 数据库访问Database | -- MySQL | -- SQLServer | -- Oracle统一database.Connect();十二、多态设计原则优秀的多态设计面向抽象编程不要Dog dognew Dog();推荐Animal animalnew Dog();少使用类型判断不推荐if(animal is Dog) { } else if(animal is Cat) { }应该animal.Speak();让对象自己处理行为。十三、总结概念关键字说明方法重载无编译时多态虚方法virtual允许重写方法重写override实现运行时多态抽象方法abstract强制子类实现接口interface规范多态一句话总结C# 多态就是通过父类或接口引用指向不同子类对象让同一个方法调用产生不同的行为从而提高程序的扩展性和可维护性。
开放词汇YOLO两大主流模型学习:YOLO-World与YOLOE 一、前言传统YOLO(YOLOv8/YOLO11)属于闭集检测,只能识别训练集中预定义类别,无人机航拍、工业巡检等场景经常出现未知目标,无法零样本识别。YOLO-World、YOLOE是基于YOLO架构的实时开放词汇目标检测模型,支… 2026/7/9 8:42:22
鸿蒙6G全域通感一体化体系架构 第一卷一阶第七篇 超密集小区干扰生克制衡原理 第一卷一阶第七篇 超密集小区干扰生克制衡原理承启前置说明上一篇建立太赫兹频段阴阳盛衰损耗演化定则,明确高频电磁阳增益、阴损耗动态对冲规律。本篇将阴阳场域、能量生克公理落地至 6G 超密集组网 UDN 场景,破解 5G 基站加密则干扰爆炸、容量与覆盖无… 2026/7/9 8:42:22
计算机毕业设计之基于SSM框架的医院信息管理系统设计与实现 在网络计算机快速发展的时代,信息管理系统已成为社会现代化发展中有着重要的作用。随着信息管理系统的不断增加,传统的人工管理易出错,且双方缺少信息关联和沟通。因此,建立一个依托互联网的医院信息管理系统来建立一个交流和沟通的渠道势在必… 2026/7/9 8:40:21
基于Spark的社交网络数据分析系统 基于Spark的社交网络数据分析系统 摘要 随着社交媒体平台的爆发式增长,微博、Twitter、Facebook等平台每日产生TB级用户行为数据,涵盖发帖、转发、点赞、关注、评论等多维交互信息。传统单机分析工具在处理海量稀疏图结构数据时面临计算瓶颈与扩展性不足… 2026/7/9 10:35:59
3分钟快速上手:AcFunDown让A站视频永久保存在本地 3分钟快速上手:AcFunDown让A站视频永久保存在本地 【免费下载链接】AcFunDown 包含PC端UI界面的A站 视频下载器。支持收藏夹、UP主视频批量下载 😳仅供交流学习使用喔 项目地址: https://gitcode.com/gh_mirrors/ac/AcFunDown 还在担心喜欢的A站视… 2026/7/9 10:33:57
AMD MI355X与NVIDIA B200在GLM5.2大模型推理性能与成本对比分析 🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在 AI 推理硬件选型中,成本与性能的平衡一直是技术决策的核心难点。AMD 最新发布的 CDNA 4 架构 MI355X 加速卡与 NVIDIA … 2026/7/9 10:33:57
AD74412R与PIC32MX460F512L的硬件协同设计与优化 1. AD74412R与PIC32MX460F512L的硬件协同设计1.1 AD74412R的接口特性解析AD74412R这颗四通道软件可配置I/O芯片在工业控制领域堪称"瑞士军刀"。我在最近一个智能温控系统项目中实测发现,其每个通道都能通过寄存器配置实现四种工作模式切换:0-1… 2026/7/9 10:31:53
终极指南:如何用SharpKeys轻松定制你的Windows键盘布局 终极指南:如何用SharpKeys轻松定制你的Windows键盘布局 【免费下载链接】sharpkeys SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key. 项目地址: https://gitcode.com/gh_mirrors/sh/sharpkeys … 2026/7/9 10:29:51
九大网盘文件直链下载工具:打破下载速度限制的浏览器脚本解决方案 九大网盘文件直链下载工具:打破下载速度限制的浏览器脚本解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动… 2026/7/9 10:27:48
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08