C#经典面试题的坑
最近看了些简单的面试题,发现有几个地方不对劲啊。
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