多態:同一操作作用於不同對象,產生不同行為。C# 主要通過兩種機制實現:
virtual 方法,派生類 override 重寫。class Animal { public virtual void Speak() => Console.WriteLine("..."); }
class Dog : Animal { public override void Speak() => Console.WriteLine("Wang"); }
Animal a = new Dog(); a.Speak(); // 輸出 Wang
interface ISpeakable { void Speak(); }
class Cat : ISpeakable { public void Speak() => Console.WriteLine("Miao"); }
class Robot : ISpeakable { public void Speak() => Console.WriteLine("Beep"); }
ISpeakable s = new Cat(); s.Speak(); // Miao
C# 7.0+ 模式匹配、動態類型 dynamic、委托/Func 均可在無繼承關系下實現多態行為:
// 模式匹配 (C# 7+)
void MakeSound(object o) {
switch (o) {
case Dog d: d.Speak(); break;
case Cat c: c.Speak(); break;
default: Console.WriteLine("Unknown");
}
}
// 委托多態
Action speak = () => new Dog().Speak();
speak += () => new Cat().Speak();
speak(); // 依次調用