基础知识(net)<3> virtural , new ,override
基础整理:
C# override重写,是指对父类中的虚方法(标记virtual)或抽象方法(标记为abstract)进行重写,实现新的功能,它必须与父类方法的签名完全一致,而且与父类方法的可访问性也必须一致 new隐藏,是指在子类中重新定义一个签名与父类的方法相同的方法,这个方法可以不用new修饰,只是编译时会弹出一个警告信息:如果是有意隐藏,请使用关键字new。
测试代码:
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 BaseClass baseClass=new AClass(); 6 baseClass.HelloWorld(); 7 Console.Read(); 8 } 9 } 10 11 public class BaseClass 12 13 { 14 public BaseClass() 15 { 16 HelloWorld(); 17 } 18 public virtual void HelloWorld() 19 { 20 Console.WriteLine("BaseClass Say Hello"); 21 } 22 } 23 24 public class AClass:BaseClass 25 { 26 public AClass() 27 { 28 HelloWorld(); 29 } 30 public override void HelloWorld() 31 { 32 Console .WriteLine("AClass Say Hello"); 33 } 34 }
这段代码将输出的是
AClass Say Hello
AClass Say Hello
AClass Say Hello
但如果此时,我们把AClass中的 override改为new 修饰符,在来看看输入:
BaseClass Say Hello
AClass Say Hello
BaseClass Say Hello
可以看到new就是完全建立一个新的方法,和原来的函数没有任何关系,因此无法使用多态,使用的时候要谨慎。