- new、virtual、override、abstract 等-重载
- new、virtual、override、abstract 等-隐藏
- new、virtual、override、abstract 等-覆盖(改写、重写)
- new、virtual、override、abstract 等-抽象
- new、virtual、override、abstract 等-隐藏与覆盖实际操作
覆盖最主要的特点是关键字 virtual、override。
public class BaseClass
{
public virtual void Do()
{
HttpContext.Current.Response.Write("基类方法");
}
}
public class DerivedClass : BaseClass
{
public override void Do()
{
HttpContext.Current.Response.Write("派生类方法");
}
}
调用:
DerivedClass dc = new DerivedClass();
dc.Do(); // 派生类方法
((BaseClass)dc).Do(); // 派生类方法
调用的都是派生类方法。
覆盖特点:
- 必须位于基类和派生类中;
- 方法名称必须相同;
- 参数类型、参数个数必须相同;
- 返回值类型必须相同(与隐藏不同);
- 必须使用关键字 virtual 和 override;
- 即使把派生类的实例转换成基类类型,也无法调用基类中被覆盖的方法,因为它已经被覆盖了嘛,不像隐藏还有被“发掘”的机会。
相关阅读
- 覆盖和隐藏的访问修饰符
- C# 类属性可以用隐藏和覆盖吗?
- new、virtual、override、abstract 等-重载
- new、virtual、override、abstract 等-隐藏
- new、virtual、override、abstract 等-覆盖(改写、重写)
- new、virtual、override、abstract 等-抽象
- new、virtual、override、abstract 等-隐藏与覆盖实际操作