new、virtual、override、abstract 等-隐藏

  • new、virtual、override、abstract 等-重载
  • new、virtual、override、abstract 等-隐藏
  • new、virtual、override、abstract 等-覆盖(改写、重写)
  • new、virtual、override、abstract 等-抽象
  • new、virtual、override、abstract 等-隐藏与覆盖实际操作

隐藏最主要的特点是关键字 new。

public class BaseClass
{
    public void Do()
    {
        HttpContext.Current.Response.Write("基类方法");
    }
}
 
public class DerivedClass : BaseClass
{
    public new void Do()
    {
        HttpContext.Current.Response.Write("派生类方法");
    }
}

new 不能位于返回值类型(这里是 void)之后。

调用:

DerivedClass dc = new DerivedClass();
dc.Do(); // 派生类方法
((BaseClass)dc).Do(); // 基类方法

dc 被转换成 BaseClass 后,其调用的就是基类的方法。

隐藏特点:

  • 必须位于基类和派生类中;
  • 方法名称必须相同;
  • 参数类型、参数个数必须相同;
  • 返回值类型可以不同;
  • 应该使用 new,虽然不使用 new 也会运行,但在编译时会被警告;
  • 调用派生类方法还是基类方法,取决于被什么类型的实例调用。

相关阅读

  • 覆盖和隐藏的访问修饰符
  • C# 类属性可以用隐藏和覆盖吗?
  • new、virtual、override、abstract 等-重载
  • new、virtual、override、abstract 等-隐藏
  • new、virtual、override、abstract 等-覆盖(改写、重写)
  • new、virtual、override、abstract 等-抽象
  • new、virtual、override、abstract 等-隐藏与覆盖实际操作

你可能感兴趣的