多态指的是定义具有不同功能但相同名称的方法或属性的多个类的能力。
C#中的多态可以由虚方法实现。
对于非虚方法,其实现是不变的,无论由基类实例调用还是由派生类实例调用都是相同的;
而虚方法的实现可以由派生类取代,取代的过程称为重写。重写可以取代从基类继承的虚方法,但原虚方法的可访问性不能改变,静态
方法和非虚方法不能被重写。
http://blog.csdn.net/huwei2003/article/details/18982039
override与重载的区别
重写:是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override。
格式如下:
1.在基类中:
2.在子类中:
public
override
void
myMethod()
{
}
重写以后,用基类对象和子类对象访问myMethod()方法,结果都是访问在子类中重新定义的方法,基类的方法相当于被覆盖掉了。
重载:用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。
重载的特征:
I.方法名必须相同
II.参数列表必须不相同,与参数列表的顺序无关
III.返回值类型可以不相同
但如果有泛型,就要注意了!
多态:c#的多态性主要体现在类的继承上:
子类继承父类的时候,可能出现同名但方法定义不同的情况,
所以在子类中会将原方法覆盖,实现自身的要求.
需要注意的地方有两点:
①.可以在子类中被重写的方法一定要被标记成virtual(虚拟), abstract(抽象), override(重写)标记为virtual 和abstract 的函数就是为了重写而创建的,标记为override的函数本身是由前两种函数重写而来的,所以它可以被重写也是顺理成章的了;
②.重写的函数必须在子类中出现,而且任何一个父类的函数在其一个子类中只能被重写一次。(这一点很好理解,当你要重写两次时,该子类中将定义两个返回类型,方法名称 和参数列表都相同的函数,这肯定是不可能的)。