最近看了些简单的面试题,发现有几个地方不对劲啊。
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 函数,来考验你是否是背答案。
时间: 2024-11-03 21:04:18