码迷,mamicode.com
首页 > Windows程序 > 详细

C#经典面试题的坑

时间:2015-08-19 09:22:35      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:

最近看了些简单的面试题,发现有几个地方不对劲啊。

1、在 下面的例子里

 using System;
     class A
     {
          public A()
           {
                PrintFields();
           }
          public virtual void PrintFields(){}
      }
      class B:A
      {
           int x=1;
           int y;
           public B()
        {
               y=-1;
           }
           public override void PrintFields()
           {
               Console.WriteLine("x={0},y={1}",x,y);
           }
    }

当 使用new B() 创建B 的实例时,产生什么输出?

网上的答案都是:X=1,Y=0;x= 1 y = -1

当实例化B时,因为继承的关系会先去实现A的构造函数,而子类重写了父类的 PrintFields 函数,所以最终输出X=1,Y=0。注意:在执行PrintFields()之前,B 的构造函数还

未执行。

如图:

技术分享

上图的断点是打在了 Btest的构造函数处,此时y的值是0。

执行完 y=-1,这一行代码之后,程序就已经执行完毕了。不会有输出内容了,所以网上的答案是错误的。

如果要实现继输出X=1,Y=0 之后再输出 x= 1 y = -1,只需要在 Btest的构造函数再执行 PrintFields 函数即可。

猜想:这有可能是个别面试官故意去掉了在Btest 的构造函数里面的 PrintFields 函数,来考验你是否是背答案。

C#经典面试题的坑

标签:

原文地址:http://www.cnblogs.com/willperfect/p/4741205.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!