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# 面向对象编程的四大核心思想。

相关新闻

最新新闻

操作系统实验实战:从内核引导到进程调度,构建你的迷你OS

操作系统实验实战:从内核引导到进程调度,构建你的迷你OS

简介:操作系统是计算机系统的核心,它负责管理硬件资源、提供公共服务,并作为用户与计算机硬件之间的桥梁。其基本原理包括进程管理、内存管理、文件系统等核心概念,通过虚拟化、并发和持久化三大抽象技术,实现对CPU、内…

2026/8/29 18:47:10
C++排序算法实战:从基础实现到通用模板函数设计

C++排序算法实战:从基础实现到通用模板函数设计

1. 项目概述:当“排序”成为一道考题 看到这个标题,我猜很多正在学习《程序设计与算法(三)》这门课的同学,心里都会咯噔一下。“排序,又见排序!”——这语气里,三分是调侃&#xff0…

2026/8/29 18:47:10
STM32硬件CRC外设详解:从系列差异到标准库/HAL库配置与踩坑实战

STM32硬件CRC外设详解:从系列差异到标准库/HAL库配置与踩坑实战

先说一个我自己的经历。去年做一台八路串口透传网关,每帧数据512字节,帧尾都要带CRC32校验。最初我图省事,直接在STM32F103上跑了一份网上找的标准查表法CRC32,72MHz主频下单帧算下来大约要一两百微秒,单独看不算离谱。…

2026/8/29 18:47:10
【数据结构】别再被“假溢出”折磨了!一文彻底搞懂循环队列的底层逻辑与C语言实现

【数据结构】别再被“假溢出”折磨了!一文彻底搞懂循环队列的底层逻辑与C语言实现

前言 本篇文章将带你了解队列基本概念、基本操作。这篇文章将带你全部搞懂。 队列基本概念 队列(queue)是限定在⼀端插⼊另⼀端删除的线性表。因此,对队列来说,插⼊那⼀端叫做队尾,插⼊叫⼊队,删除那⼀端叫队头,删除叫…

2026/8/29 18:47:10
生产环境从零搭建系统:运维工程师的完整生命周期方法论

生产环境从零搭建系统:运维工程师的完整生命周期方法论

1. 一道校招笔试题,问的其实是“完整生命周期”先说说这道题。搜狐畅游2019校招笔试题里出现“系统工程师”方向的内容,核心热词落到“作为一个运维工程师,如何在生产环境从零搭建一个系统并做好后续维护”上。这类题乍看像是问装机流程&…

2026/8/29 18:47:10
机器人测试岗位详解:从扫地机器人整机测试到薪资进阶

机器人测试岗位详解:从扫地机器人整机测试到薪资进阶

这次我们来看一个经常被问到的就业方向:机器人测试。起因是一个粉丝私信我说想转行,看到扫地机器人、服务机器人这类终端产品的测试岗位,目标是月薪 15k,问我“能不能学、怎么学、有没有坑”。 我先给结论:机器人测试…

2026/8/29 18:42:09