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/archive/2012/09/17/2689043.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值