多態分為兩種情況,一種是編譯的時候的多態性,一種是運行時的多態性。
編譯時的多態性:編譯時的多態性是通過重載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。
運行時的多態性:運行時的多態性就直到運行時,才根據實際情況實現何種操作。C#中運行時的多態性是通過復寫虛函數實現的。
C#中的,多態人們很不容易分清楚。明明是一個相同的名稱,而調用起來,卻出現了不同的結果。現在來通過一個例子來體會一下多態是如何實現的。
子類繼承父類得到的方法,可以通過重寫來覆蓋。這樣父類的實例就可以使用子類的方法。
class Program { static void Main(string[] args) { fruit ep; //定義一個水果的實例 ep= new Apple(); ep.AddFruit(5); ep = new Orange(); ep.AddFruit(4); } } public abstract class fruit //創建一個抽象類-水果 { private uint nint_Weight; public abstract void AddFruit(uint nWeight); } public class Apple : fruit //創建水果的子類-蘋果 { public override void AddFruit(uint nWeight) { Console.WriteLine("你添加了一個蘋果,質量為{0}",nWeight); } } public class Orange : fruit //創建水果的子類-橘子 { public override void AddFruit(uint nWeight) { Console.WriteLine("你添加了一個橘子,質量為{0}", nWeight); } }
繼承:當子類繼承父類的時候,子類可以不用重新定義父類中的方法,可以直接使用。
多態:當子類重寫父類的方法時。父類的對象,調用子類的方法時候,會根據情況來選擇基類的方法。