override与new的区别

下面以一下例子为例,想一下,输出的结果将会是什么:

View Code
 1 class A
 2     {
 3         public virtual void F()
 4         {
 5             Console.WriteLine("A.F");
 6         }
 7 
 8         public virtual void E()
 9         {
10             Console.WriteLine("A.E");
11         }
12     }
13 
14 class B : A
15     {
16         public override void F()
17         {
18             Console.WriteLine("B.F");
19         }
20 
21         public new void E()
22         {
23             Console.WriteLine("B.E");
24         }
25     }
26 
27 static void Main(string[] args)
28         {
29             B a = new B();
30             A b = a;
31             b.F();
32 
33             b.E();
34             a.E();
35             Console.Read();
36         }

你心中的答案是否正确,来看下面。

b.F();之所以调用的是B类的,是因为现在的‘F’方只有B类重写方法,被重写以后就只有这一个了。

b.E();之所以调用的是A类的,是因为NEW只起到了隐藏的作用,当A对象调用'E'方法时,肯定得先到A类去找,一找,额有,就调用此方法了,哪管派生类了。

a.E();a是属于B类对象,肯定调用B类的咯。

这是我的个人理解,如有哪说的不对,欢迎拍砖!我也是菜鸟呀!

原文地址:https://www.cnblogs.com/pfcan66/p/2689043.html