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(); } } }