当前位置:首页 > Windows程序 > 正文

C#经典面试题的坑

2021-03-27 Windows程序

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

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 函数,来考验你是否是背答案。

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/68293.html