使用Override和New关键字进行版本控制

发表于:2009-10-22 10:34

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
DotNet

  C# 语言经过专门设计,以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容。这具有多方面的意义。例如,这意味着在基类中引入与派生类中的某个成员具有相同名称的新成员在 C# 中是完全支持的,不会导致意外行为。它还意味着类必须显式声明某方法是要重写一个继承方法,还是一个仅隐藏具有类似名称的继承方法的新方法。

  C# 允许派生类包含与基类方法名称相同的方法。

  基类方法必须定义为 virtual。

  如果派生类中的方法前面没有 new 或 override 关键字,则编译器将发出警告,该方法将有如存在 new 关键字一样执行操作。

  如果派生类中的方法前面带有 new 关键字,则该方法被定义为独立于基类中的方法。

  如果派生类中的方法前面带有 override 关键字,则派生类的对象将调用该方法,而不调用基类方法。

  可以从派生类中使用 base 关键字调用基类方法。

  override、virtual 和 new 关键字还可以用于属性、索引器和事件中。

  默认情况下,C# 方法不是虚方法 -- 如果将一种方法声明为虚方法,则继承该方法的任何类都可以实现其自己的版本。若要使方法成为虚方法,必须在基类的方法声明中使用 virtual 修饰符。然后,派生类可以使用 override 关键字重写基虚方法,或使用 new 关键字隐藏基类中的虚方法。如果 override 关键字和 new 关键字均未指定,编译器将发出警告,并且派生类中的方法将隐藏基类中的方法。

  class A
  {
  public A()
  {
  Console.WriteLine("A");
  }
  public virtual void Fun()
  {
  Console.WriteLine("A.Fun()");
  }
  public virtual void Fun2()
  {
  Console.WriteLine("A.Fun2()");
  }
  public void Fun3()
  {
  Console.WriteLine("A.Fun3()");
  }
  }
  class B : A
  {
  public B()
  {
  Console.WriteLine("B");
  }
  public new void Fun()
  {
  Console.WriteLine("B.Fun()");
  }
  public override void Fun2()
  {
  Console.WriteLine("B.Fun2()");
  }
  public void Fun3()
  {
  Console.WriteLine("B.Fun3()");
  }
  }
  static void Main(string[] args)
  {
  A a = new B();
  a.Fun();
  a.Fun2();
  a.Fun3();
  Console.Read();
  }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号