掌握 C# 继承:概念、类型与实战代码完全指南
C# 继承详解
本指南涵盖 C# 继承基础、各种形式及实战代码示例。
C# 继承允许创建从现有类派生的新类,形成父类(基类)与子类(派生类)关系。这一 OOP 强大特性促进代码复用与逻辑组织。
基类提供字段、属性、方法供派生类继承,子类可在保留共享逻辑的同时扩展或定制行为。
如何在 C# 中声明继承
C# 中用冒号 (:) 表示继承:
class Animal {
// 字段和方法
}
// Dog 继承自 Animal
class Dog : Animal {
// Animal 的字段和方法
// Dog 自己的字段和方法
}
Dog 扩展 Animal,获得其成员访问权。下图展示关系。

示例:基础继承
using System;
namespace Inheritance {
// 基类
class Animal {
public string name;
public void Display() {
Console.WriteLine("I am an animal");
}
}
// 派生类
class Dog : Animal {
public void GetName() {
Console.WriteLine("My name is " + name);
}
}
class Program {
static void Main(string[] args) {
Dog labrador = new Dog();
labrador.name = "Rohu";
labrador.Display();
labrador.GetName();
Console.ReadLine();
}
}
}
输出
I am an animal My name is Rohu
Dog 继承了 Animal 的 name 字段和 Display() 方法。派生类也可添加自身成员如 GetName()。
"is-a" 关系
继承体现 "is-a" 关系。当一类逻辑上是另一类的特化形式时使用。
- Dog is an Animal
- Apple is a Fruit
- Car is a Vehicle
这些关系证明从 Animal 派生 Dog、从 Fruit 派生 Apple、从 Vehicle 派生 Car 的合理性。
继承中的 protected 成员
protected 字段或方法在自身类及所有派生类中可访问,对外部代码隐藏。
示例:使用受保护方法
using System;
namespace Inheritance {
class Animal {
protected void Eat() {
Console.WriteLine("I can eat");
}
}
class Dog : Animal {
static void Main(string[] args) {
Dog labrador = new Dog();
labrador.Eat();
Console.ReadLine();
}
}
}
输出
I can eat
Eat() 为 protected,Dog 可调用,但层级外代码不可访问。
继承类型
继承呈现多种模式:
1. 单继承
单个派生类继承自一个基类。

2. 多级继承
继承链:类继承基类,另一类再继承该派生类。

3. 层次继承
多个派生类共享同一基类。

4. 多重继承
C# 不支持多重类继承,但接口提供灵活替代方案实现类似行为。

5. 混合继承
两种或以上继承类型组合,如多级加层次。

方法重写
派生类声明与基类 virtual 方法同签名的方法,并用 override 重写,实现多态行为。
using System;
namespace Inheritance {
class Animal {
public virtual void Eat() {
Console.WriteLine("I eat food");
}
}
class Dog : Animal {
public override void Eat() {
Console.WriteLine("I eat dog food");
}
}
class Program {
static void Main(string[] args) {
Dog labrador = new Dog();
labrador.Eat();
}
}
}
输出
I eat dog food
Dog 中的 Eat() 重写了 Animal 的实现。virtual 允许重写,override 标识替换。
使用 base 关键字
重写方法中需调用基类实现时,用 base 关键字。
示例:调用基类方法
using System;
namespace Inheritance {
class Animal {
public virtual void Eat() {
Console.WriteLine("Animals eat food.");
}
}
class Dog : Animal {
public override void Eat() {
base.Eat();
Console.WriteLine("Dogs eat dog food.");
}
}
class Program {
static void Main(string[] args) {
Dog labrador = new Dog();
labrador.Eat();
}
}
}
输出
Animals eat food. Dogs eat dog food.
base.Eat() 先调用 Animal 实现,再执行派生类逻辑。
为什么 C# 继承很重要
继承让相关类复用逻辑。例如几何形状周长计算共享公式。
- 创建 RegularPolygon 基类含 CalculatePerimeter() 方法。
- 派生 Square 和 Rectangle,添加 Length、Sides 等特有属性。
- 各派生类实现各自面积计算,复用周长逻辑。
演示示例
using System;
namespace Inheritance {
class RegularPolygon {
public void CalculatePerimeter(int length, int sides) {
int result = length * sides;
Console.WriteLine("Perimeter: " + result);
}
}
class Square : RegularPolygon {
public int Length = 200;
public int Sides = 4;
public void CalculateArea() {
int area = Length * Length;
Console.WriteLine("Area of Square: " + area);
}
}
class Rectangle : RegularPolygon {
public int Length = 100;
public int Breadth = 200;
public int Sides = 4;
public void CalculateArea() {
int area = Length * Breadth;
Console.WriteLine("Area of Rectangle: " + area);
}
}
class Program {
static void Main(string[] args) {
Square s1 = new Square();
s1.CalculateArea();
s1.CalculatePerimeter(s1.Length, s1.Sides);
Rectangle t1 = new Rectangle();
t1.CalculateArea();
t1.CalculatePerimeter(t1.Length, t1.Sides);
}
}
}
输出
Area of Square: 40000 Perimeter: 800 Area of Rectangle: 20000 Perimeter: 400
此模式展示继承如何减少重复、增强可维护性。
C语言
- C# 类与对象:面向对象编程的基石
- 理解 C# 访问修饰符:public、private、protected、internal 等完全指南
- C# static 关键字:静态变量、方法与类完全掌握
- 掌握 C# 抽象类与抽象方法:实战指南
- 理解 C# 嵌套类:定义、访问与继承实战
- 理解 C# 分部类与分部方法
- 掌握 C# sealed 类与方法:用法、示例与代码安全性能提升
- C++多态实战指南:虚函数、动态绑定与纯虚函数
- C++数据抽象实战:接口与实现分离的设计艺术
- C# 程序结构解析:从 Hello World 看命名空间、类、Main 入口与编译运行
- C# 基础语法与面向对象核心:类、成员、实例化、标识符与关键字
- C# 封装详解:访问修饰符与面向对象设计最佳实践