在C#中,继承和多态性是面向对象编程的三大核心特性中的两个(另一个是封装)。它们让代码更灵活、可复用,并支持扩展。下面带你快速掌握C#中类的继承与多态性的基本用法。
什么是继承?
继承允许一个类(子类)获取另一个类(父类)的字段、方法和属性。子类可以在不重复编写代码的前提下,复用并扩展父类的功能。
在C#中使用冒号 : 来表示继承。
示例:简单的继承结构
public class Animal
{
public void Eat()
{
Console.WriteLine("动物在吃东西");
}
public virtual void MakeSound()
{
Console.WriteLine("动物发出声音");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("汪汪!");
}
public void Bark()
{
Console.WriteLine("狗在叫");
}
}
上面代码中,Dog 类继承自 Animal 类,因此它拥有 Eat() 方法,也可以重写或新增自己的行为。
如何实现多态性?
多态性是指同一个方法调用可以根据对象的实际类型表现出不同的行为。它是通过虚方法(virtual)和重写(override)来实现的。
关键点:
父类中用 virtual 声明可被重写的方法 子类中用 override 替换父类的实现 可以用父类引用指向子类对象,运行时自动调用对应的方法示例:多态调用
Animal myAnimal = new Dog(); myAnimal.Eat(); // 输出:动物在吃东西 myAnimal.MakeSound(); // 输出:汪汪!(调用的是 Dog 的重写方法)
尽管变量类型是 Animal,但实际对象是 Dog,所以 MakeSound() 调用的是子类的版本 —— 这就是多态。
常见规则和注意事项
C#只支持单类继承 —— 一个类只能直接继承一个父类 可以实现多个接口(interface),弥补单继承限制 构造函数不会被继承,但子类会自动调用父类的无参构造函数 若父类没有无参构造函数,需在子类中用 : base(...) 显式调用 标记为 sealed 的类不能被继承带参数构造函数的继承示例:
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Cat : Animal
{
public Cat(string name) : base(name) { }
public override void MakeSound()
{
Console.WriteLine($"{Name} 喵喵叫");
}
}
小结
继承帮助我们复用代码,建立类之间的层次关系;多态让我们能以统一的方式处理不同类型的对象,提升程序的扩展性和维护性。掌握 virtual、override 和父类引用指向子类对象的用法,是理解C#面向对象编程的关键一步。
基本上就这些,动手写几个类试试,很快就能上手。
