Z
ZHANK
面向对象

继承

基类/派生类、virtual/override、sealed 密封、base 调用父类

继承

C# 是单继承语言——一个类只能继承一个基类。但可以实现多个接口。

学完本章你将: 掌握基类/派生类、virtual/override、sealed、base。


基本继承

csharp
public class Animal
{
    public string Name { get; set; }

    public Animal(string name) => Name = name;

    // virtual = 允许子类重写
    public virtual string Speak() => $"{Name} 发出叫声";
}

public class Dog : Animal
{
    public Dog(string name) : base(name) { }  // 调用基类构造

    // override = 重写基类方法
    public override string Speak() => $"{Name} 汪汪叫!";

    public string Fetch() => $"{Name} 去捡球了";
}

var dog = new Dog("旺财");
Console.WriteLine(dog.Speak());  // 旺财 汪汪叫!

sealed —— 禁止继承/重写

csharp
// sealed 类——不能被继承
public sealed class StringHelper { }

// sealed 方法——不能被进一步重写
public class Base
{
    public virtual void DoWork() { }
}

public class Derived : Base
{
    public sealed override void DoWork() { }  // 子类的子类不能重写
}

base 调用父类

csharp
public class TimestampLogger : Logger
{
    public override void Log(string msg)
    {
        base.Log($"[{DateTime.Now}] {msg}");  // 调用父类实现
    }
}