本文将介绍以下内容:
什么是覆写,什么是重载
覆写与重载的区别
覆写与重载在多态特性中的应用
1.引言
覆写(override)与重载(overload),是成就.NET面向对象多态特性的基本技术之一,两个貌似相似而实则不然的概念,常常带给我们很多的误解,因此有必要以专题来讨论清楚其区别,而更重要的是关注其在多态中的应用。
在系列中,我们先后都有关于这一话题的点滴论述,本文以专题的形式再次做以深度讨论,相关的内容请对前文做以参考。
2.认识覆写和重载
从一个示例开始来认识什么是覆写,什么是重载?
abstract class Base
{
//定义虚方法
public virtual void MyFunc()
{
}
//参数列表不同,virtual不足以区分
public virtual void MyFunc(string str)
{
}
//参数列表不同,返回值不同
public bool MyFunc(string str, int id)
{
Console.WriteLine("AAA");
return true;
}
//参数列表不同表现为个数不同,或者相同位置的参数类型不同
public bool MyFunc(int id, string str)
{
Console.WriteLine("BBB");
return false;
}
//泛型重载,允许参数列表相同
public bool MyFunc<T>(string str, int id)
{
return true;
}
//定义抽象方法
public abstract void Func();
}
class Derived: Base
{
//阻隔父类成员
public new void MyFunc()
{
}
//覆写基类成员
public override void MyFunc(string str)
{
//在子类中访问父类成员
base.MyFunc(str);
}
//覆写基类抽象方法
public override void Func()
{
//实现覆写方法
}
}