new、virtual、override、abstract 等-覆盖(改写、重写)

  • 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 等-隐藏与覆盖实际操作

你可能感兴趣的