基础知识(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就是完全建立一个新的方法,和原来的函数没有任何关系,因此无法使用多态,使用的时候要谨慎。

原文地址:https://www.cnblogs.com/liaotongquan/p/3000651.html