MSDN 上面的定義:通過繼承,一個類可以有多種類型:可以用作它自己的類型,任何基類型,或者在實現接口時用作任何接口的類型。
從兩個方面來說明多態
1.在運行時,方法參數和集合或者是數組等位置,派生類的對象都可以作爲基類的對象處理,發生此情況時,該對象的聲明類型不再與運行時類型相同。
2.基類定義實現虛方法,派生類重寫這些方法,在運行時,CLR會查找運行時類型,並且調用派生類重寫的方法.
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Draw a shape");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a circle");
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Rectangle");
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("Draw a Triangle");
}
}
class Programm
{
static void Main()
{
//此次就說明了,派生類對象可以作爲基類對象進行處理
Shape[] shapes =
{
new Circle(),
new Rectangle(),
new Triangle()
};
foreach (Shape s in shapes)
{
//調用Draw()方法的時候,調用了派生重寫的方法,而不是基類
s.Draw();
}
}
}