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