多態 當初剛學C#的時候經常聽說,但一直都不懂,想必對於很多初學者也是如此吧!
多態表示不同的對象可以執行相同的動作,但要通過他們自己的實現代碼來執行。
看到執行執行相同的操作,我們都會想到繼承,其實多態也就是繼承,只不過高於繼承,子類繼承父類,繼承了父類的方法,但是怎麼樣把這個方法真正變成自己的,也就是說通過自己的代碼實現來執行,這裡我們就需要了解一些概念:虛方法和重寫
為了使子類的實例完全接替來自父類的成員,父類必須將該成員聲明為虛擬的。這是通過在該成員的返回類型之前添加virtual關鍵字來實現的。通常虛擬的是方法,但其實除了字段不能是虛擬的,屬性、事件和索引器都可以是虛擬的。盡管方法可以是虛擬的,但虛方法還是有方法體,表現父類的行為。然後,子類可以選擇使用override關鍵字,將父類實現替換為子類自己的實現,這就是方法重寫Override,或者叫做方法覆寫。
看一下代碼:
class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
public virtual void Shout()
{
Console.WriteLine("我是父類 ");
}
}
class Cat : Animal
{
public Cat(string name)
: base(name)
{
}
public override void Shout()
{
Console.WriteLine("我的名字叫" + Name);
}
}
class Dog : Animal
{
public Dog(string name)
: base(name)
{
}
}
static void Main(string[] args)
{
Animal animal1 = new Cat("小貓");
Animal animal2 = new Dog("小狗");
animal1.Shout();
animal2.Shout();
Console.ReadKey();
}
運行是

我們可以看到子類如果重寫了父類的方法,那麼調用的就是自己的方法,如果沒有重寫,實現的還是父類的行為。
另外我們還要注意一點,這個對象的聲明必須是父類,而不是子類,實例化的是子類,這才能實現多態。多態的原理是當方法被調用時,無論對象是否被轉換為父類,都只有位於對象繼承連最末端的方法實現會被調用,也就是說,虛方法會按照其運行時,而非編譯時進行動態綁定調用的。
查看本欄目