隐藏父类方法的new和重写父类虚方法virtual的区别

一、代码

  

 1     public class Parent
 2     {
 3         public void Method_A()
 4         {
 5             Console.WriteLine("Parent Method_A");
 6         }
 7         public virtual void Method_B()
 8         {
 9             Console.WriteLine("Parent Method_B");
10         }
11     }
12     public class Child : Parent
13     {
14         public new void Method_A()
15         {
16             Console.WriteLine("Child Method_A");
17         }
18         public override void Method_B()
19         {
20             Console.WriteLine("Child Method_B");
21         }
22     }
23     class Program
24     {
25         static void Main(string[] args)
26         {
27             Child child = new Child();
28             child.Method_A();
29             child.Method_B();
30 
31             Parent p = child as Parent;
32             p.Method_A();
33             p.Method_B();
34 
35             Console.Read();
36         }
37     }

   显示结果:

  

二、总结 

  1、子类使用new隐藏父类方法后,是独立于父类的方法。

  2、子类使用override重写父类的方法后,只是在调用时不再调用父类方法而调用子类方法。

  3、子类也可以使用new隐藏父类的虚方法

  3、创建的Child实例,在执行Method_AMethod_B方法时,都执行的是Child中的方法。

       但是将该实例转换成父类时,Method_A执行的是ParentMethod_A方法,而Method_B执行的依旧是Child中的Method_B方法。



原文地址:https://www.cnblogs.com/hyunbar/p/10062693.html