在C#中,多态的定义是:同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果。C#支持两种
类型的多态性:
1)编译时的多态性
编译时的多态性是通过重载来实现的。方法重载和操作符重载,它们都实现了编译时的多态性。对于非虚的成员来说,系统
在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。
2)运行时的多态性
运行时的多态性就是指直到系统运行时,才根据实现情况决定实现何种操作。C#中运行时的多态生通过虚成员实现。
编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。
虚方法:
当类中的方法声明前加上了virtual修饰符,我们称之为虚方法,反之为非虚方法。
对于非虚的方法,无论被其所在类的实例调用,还是被这个类的派生类的实例调用,方法的执行方式不变。而对于虚方法,它
的执行方式可以被派生类改变,这种改变是通过方法的重载来实现的。
在派生类中对虚方法进行重载:
变通方法的重载:类中两个以上的方法(包括隐藏的继承而来的方法),取的名字相同,只要使用的参数类型或者参数个数不同,
编译器便知道在何种情况下应该调用哪人方法。
基本类虚方法的重载是函数重载的另一种特殊形式。在派生类中重新定义此虚函数时,要求的是方法名称
返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚函数完全一致。在派生类中声明对虚方法的重载,要求在声
明中加上override关键字,而且不能有new,static或virtual修饰符。
以例子来说明多态性: