C#中的overrid和new修饰符区别(代码)

 在C#的继承中尝尝会用到相关的修饰词:override和new。这两个修饰符均可以在新的子类中,重写同名的父类方法。ide

    override: 扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟实现须要使用到。测试

    new:在用做声明修饰符时,new 关键字能够显式隐藏从基类继承的成员。 隐藏继承的成员时,该成员的派生版本将替换基类版本。 spa

以上是这两个修饰符的解释。对于这二者之间的区别之类的说法,其实网上找到的有不少,大多都是些概念性的东西。我这里主要是对于,本身测试的代码和你们分享下。code

 1 using System;  2 
 3 public class BaseClass{  4   public virtual void ShowA(){  5     Console.WriteLine("A");  6  }  7 
 8   public void ShowB(){  9     Console.WriteLine("B"); 10  } 11 
12   public void ShowAB(){ 13  ShowA(); 14  ShowB(); 15  } 16 } 17 
18 public class TestClass:BaseClass{ 19   public override void ShowA(){ 20     Console.WriteLine("AA"); 21  } 22 
23   public new void ShowB(){ 24     Console.WriteLine("BB"); 25  } 26 } 27 
28 public class Example 29 { 30     public static void Main() 31  { 32       TestClass test = new TestClass(); 33  test.ShowA(); 34  test.ShowB(); 35  test.ShowAB(); 36 
37       BaseClass test1 = new TestClass(); 38  test.ShowA(); 39  test.ShowB(); 40  test.ShowAB(); 41 
42  Console.ReadLine(); 43       Console.WriteLine("运行结束"); 44  } 45 }

 

输出结果以下:blog

 

能够看出,override至关于修改的父类的方法,对父类方法进行了重写。在父类方法中调用时,一样也是会调用到这个已经重写过得类。override重写的是父类地址下的方法实现信息。继承

对于new,对父类中的方法没有产生影响,当调用父类方法时,仍是会执行父类的方法。调用子类方法时,则调用子类方法。只是方法的名字相同,从而形成了子类对父类的方法形成了一种隐藏的特性。new至关于从新开辟了新的方法实现位置,子类与父类方法的地址是不一样的。索引

相关文章
相关标签/搜索