override和 new(简单介绍)

C# override重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致 new隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。

  1. using System;    
  2. public class Test     
  3. {    
  4.     public static void Main(String[] args){    
  5.         A a=new B();     
  6.         Console.Write(a.getVal()); // 输出:A 虽然实例是B,但是执行的却是A的方法     (new后,调用父类的方法)
  7.    
  8.         a=new C();     
  9.         Console.Write(a.getVal()); // 输出:C 实例是C,而且C重写的A的方法,所以执行C的方法   (override后,调用子类方法)
  10.    
  11.         B b=new B();     
  12.         Console.Write(b.getVal()); // 输出:B 只有定义和实例都是B,才执行B的方法   
  13.     }     
  14. }    
  15. class A    
  16. {    
  17.     // 要允许子类重写,方法必须标识为virtual 或 abstract   
  18.     public virtual String getVal(){     
  19.         return "A";     
  20.     }     
  21. }     
  22. class B : A    
  23. {    
  24.     // 隐藏父类方法 用new标识,不标识时会出现编译警告,不影响使用   
  25.     public new String getVal(){     
  26.         return "B";     
  27.     }     
  28. }     
  29. class C : A    
  30. {    
  31.     // 重写方法 必须用override标识   
  32.     public override String getVal(){     
  33.         return "C";     
  34.     }     
  35. }