多态(Polymorphism)顾名思义就是多种状态。在面向对象语言中,多态是指一个实体同时具有多种形式,它是面向对象的一个重要特征。同一操作作用于不同的对象,可以有不同解释,产生不同的结果。多态要通过继承来实现。
可以把不同的子类都当做父类来看,在运行时,可以通过指向几类的指针,来调用实现派生类中的方法,这样就屏蔽不同子类之间的差异,写出通用的代码,以适应需求的不断变化。
public abstract class Animal
{
public abstract void Eat();
}
public class Cat : Animal
{
public override void Eat()
{
Console.WriteLine("Cat Eat");
}
}
public class Dog : Animal
{
public override void Eat()
{
Console.WriteLine("Dog Eat");
}
}
Animal animal = new Cat();
animal .Eat(); //输出:Cat Eat
animal = new Dog ();
animal .Eat(); //输出:Dog Eat
这样父对象可以根据当前赋值给他的子对象的特性以不同的方式运作,也就是说父亲的行为像儿子,而不是儿子的行为像父亲。
多态分为编译时多态和运行时多态:
编译时多态是通过重载来实现的,对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
运行时多态性是指直到系统运行时,才根据实际情况来决定实现何种操作。在C#中,运行时的多态是通过虚成员来实现的。上面的例子体现的就是运行时多态性。