C# 继承(Inheritance)详解 继承Inheritance是 C# 面向对象编程OOP的核心特性之一它允许一个类获得另一个类的成员字段、属性、方法等从而实现代码复用并建立类之间的层次关系。简单理解子类派生类继承父类基类的特征并可以扩展或修改这些特征。例如动物 → 狗交通工具 → 汽车员工 → 程序员这些关系都符合狗是一种动物汽车是一种交通工具程序员是一种员工在 C# 中通常称为is-a 关系。1. 基本语法C# 使用冒号:表示继承。语法class 子类 : 父类 { }例如// 父类 class Animal { public string Name; public void Eat() { Console.WriteLine(动物吃东西); } } // 子类继承 Animal class Dog : Animal { }使用Dog dog new Dog(); dog.Name 旺财; dog.Eat();输出动物吃东西虽然Dog没有定义Eat()方法但是继承了Animal的方法。2. 继承获得什么子类可以继承父类成员是否继承public 字段✅public 属性✅public 方法✅protected 成员✅private 成员❌构造函数❌析构函数❌例如class Person { public string Name; protected int Age; private string Password; public void Speak() { Console.WriteLine(说话); } } class Student : Person { }Student可以访问Name; Age; Speak();不能访问Password;3. 父类和子类关系例如class Animal { public void Eat() { Console.WriteLine(吃东西); } } class Cat : Animal { public void CatchMouse() { Console.WriteLine(抓老鼠); } }调用Cat cat new Cat(); cat.Eat(); cat.CatchMouse();输出吃东西 抓老鼠结构Animal | | CatCat 拥有Eat() CatchMouse()4. 子类扩展父类功能继承最大的作用在已有功能基础上增加新功能。例如class Employee { public string Name; public void Work() { Console.WriteLine(工作); } } class Programmer : Employee { public void WriteCode() { Console.WriteLine(写代码); } }使用Programmer p new Programmer(); p.Name 张三; p.Work(); p.WriteCode();输出工作 写代码5. 方法重写override继承后有时候子类需要改变父类的方法行为。这叫方法重写Override父类class Animal { public virtual void Sound() { Console.WriteLine(动物叫); } }注意virtual表示这个方法允许子类修改。子类class Dog : Animal { public override void Sound() { Console.WriteLine(汪汪叫); } }调用Animal a new Dog(); a.Sound();输出汪汪叫6. virtual 和 override继承中常见组合父类public virtual 方法()允许修改。子类public override 方法()重新实现。例如class Shape { public virtual void Draw() { Console.WriteLine(画图形); } } class Circle : Shape { public override void Draw() { Console.WriteLine(画圆); } }7. base 关键字base表示调用父类成员例如class Animal { public void Eat() { Console.WriteLine(吃东西); } } class Dog : Animal { public void Eat() { base.Eat(); Console.WriteLine(狗吃骨头); } }调用Dog d new Dog(); d.Eat();输出吃东西 狗吃骨头8. 调用父类构造函数子类对象创建时一定会先调用父类构造函数。例如class Person { public Person() { Console.WriteLine(Person构造); } } class Student : Person { public Student() { Console.WriteLine(Student构造); } }执行Student s new Student();输出Person构造 Student构造顺序父类构造 ↓ 子类构造9. 使用 base 调父类构造父类class Person { public Person(string name) { Console.WriteLine(name); } }子类class Student : Person { public Student() : base(学生) { } }执行Student s new Student();输出学生10. C# 不支持多继承C#❌ 不允许class Dog : Animal, Pet { }一个类只能继承一个父类。但是支持多个接口✅class Dog : Animal, IRunnable, IFlyable { }结构Animal | Dog / \ IRunnable IFlyable11. sealed 禁止继承如果不希望别人继承你的类使用sealed例如sealed class MathHelper { }下面会报错class MyMath : MathHelper { }错误无法从密封类型继承12. 抽象类继承抽象类不能直接创建对象。例如abstract class Animal { public abstract void Sound(); }子类必须实现class Dog : Animal { public override void Sound() { Console.WriteLine(汪汪); } }使用Animal a new Dog(); a.Sound();13. 继承与多态继承是多态的基础。例如class Animal { public virtual void Speak() { Console.WriteLine(动物声音); } } class Dog : Animal { public override void Speak() { Console.WriteLine(汪汪); } } class Cat : Animal { public override void Speak() { Console.WriteLine(喵喵); } }统一调用Animal[] animals { new Dog(), new Cat() }; foreach(Animal a in animals) { a.Speak(); }输出汪汪 喵喵这就是父类引用指向不同子类对象。14. 类型转换向上转换自动子类 → 父类安全Dog dog new Dog(); Animal animal dog;向下转换需要强制父类 → 子类Animal animal new Dog(); Dog dog (Dog)animal;15. is 判断类型if(animal is Dog) { Console.WriteLine(这是狗); }16. as 转换Dog dog animal as Dog; if(dog ! null) { dog.Sound(); }17. 继承实际案例例如游戏开发父类class Character { public int HP; public virtual void Attack() { Console.WriteLine(攻击); } }战士class Warrior : Character { public override void Attack() { Console.WriteLine(挥剑攻击); } }法师class Mage : Character { public override void Attack() { Console.WriteLine(释放魔法); } }调用Character c1 new Warrior(); Character c2 new Mage(); c1.Attack(); c2.Attack();输出挥剑攻击 释放魔法18. 继承设计原则适合继承例如动物 | 狗因为狗 是 动物不适合继承例如汽车 | 发动机因为发动机不是汽车这种应该使用组合class Car { Engine engine; }19. 继承 vs 组合特点继承组合关系is-ahas-a代码复用高高耦合强弱灵活性低高推荐程度谨慎使用优先考虑现代 C# 开发中优先组合谨慎继承。20. C# 继承核心总结关键字作用:表示继承virtual允许重写override重写父类方法base访问父类abstract抽象类/抽象方法sealed禁止继承protected给子类访问is类型判断as安全转换一句话总结C# 继承让子类复用父类代码并通过 virtual override 实现多态是面向对象设计中实现扩展和复用的重要机制。继承通常和封装、抽象、多态一起构成 C# 面向对象编程的四大核心思想。

相关新闻

最新新闻

openEuler Jenkins多架构支持:x86-64和aarch64双平台构建方案

openEuler Jenkins多架构支持:x86-64和aarch64双平台构建方案

openEuler Jenkins多架构支持:x86-64和aarch64双平台构建方案 【免费下载链接】openeuler-jenkins This repository is used to store the jenkins scripts in openEuler community. 项目地址: https://gitcode.com/openeuler/openeuler-jenkins 前往项目官网…

2026/7/9 19:27:49
杰理AC632n BLE一主多从实战:基于CONFIG_APP_CENTRAL连接3个从机并收发数据

杰理AC632n BLE一主多从实战:基于CONFIG_APP_CENTRAL连接3个从机并收发数据

杰理AC632n BLE一主多从实战:基于CONFIG_APP_CENTRAL连接3个从机并收发数据在物联网设备快速普及的今天,多设备协同工作成为常态。杰理AC632n芯片凭借其优异的BLE性能和灵活的SDK配置,成为实现一主多从通信的理想选择。本文将手把手带您完成从…

2026/7/9 19:27:49
跨模态行人重识别 AGW vs. 频域聚合 FDSIFA:SYSU-MM01 数据集 2 方案性能对比

跨模态行人重识别 AGW vs. 频域聚合 FDSIFA:SYSU-MM01 数据集 2 方案性能对比

跨模态行人重识别技术深度对比:AGW与FDSIFA在SYSU-MM01数据集上的性能解析1. 跨模态行人重识别技术演进与挑战当监控摄像头在低光照条件下自动切换至红外模式时,如何确保系统仍能准确识别同一行人?这正是跨模态行人重识别(Cross-M…

2026/7/9 19:27:49
高精度ADC与ARM MCU在工业测量中的联合应用

高精度ADC与ARM MCU在工业测量中的联合应用

1. 项目背景与核心器件选型 在工业测量和精密仪器领域,如何实现高精度模拟信号采集一直是工程师面临的挑战。传统方案往往需要在精度、速度和成本之间做出妥协,而德州仪器的ADS1262与NXP的MK64FN1M0VDC12的组合提供了一种创新解决方案。 ADS1262是一款3…

2026/7/9 19:27:49
全面解析QC质量工具:查检表、层别法、排列图等十余种核心工具详解

全面解析QC质量工具:查检表、层别法、排列图等十余种核心工具详解

引言:什么是QC质量工具?在质量管理领域,QC(Quality Control,质量控制)工具是一系列用于识别、分析、解决质量问题的结构化方法和可视化技术。它们帮助团队系统性地收集数据、分析根本原因、监控过程稳定性&…

2026/7/9 19:27:49
OpenDesign DataStat数据可视化实践:使用ECharts打造专业级社区贡献图表

OpenDesign DataStat数据可视化实践:使用ECharts打造专业级社区贡献图表

OpenDesign DataStat数据可视化实践:使用ECharts打造专业级社区贡献图表 【免费下载链接】opendesign-datastat The repository of OpenDesign datastat 项目地址: https://gitcode.com/openeuler/opendesign-datastat 前往项目官网免费下载:http…

2026/7/9 19:22:49

月新闻