多態分為兩種情況,一種是編譯的時候的多態性,一種是運行時的多態性。
編譯時的多態性:編譯時的多態性是通過重載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操作。
運行時的多態性:運行時的多態性就直到運行時,才根據實際情況實現何種操作。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);
}
}

繼承:當子類繼承父類的時候,子類可以不用重新定義父類中的方法,可以直接使用。
多態:當子類重寫父類的方法時。父類的對象,調用子類的方法時候,會根據情況來選擇基類的方法。