【发布时间】:2014-05-09 15:27:50
【问题描述】:
我有以下场景:
Class A
{
public static A instance;
static A()
{
if(condition)
{
instance = new B();
}
else
{
instance = new A();
}
}
public A()
{
WriteSomething();
}
virtual void WriteSomething()
{
Console.WriteLine("A constructor called");
}
}
Class B : A
{
public B()
{
WriteSomething();
}
override void WriteSomething()
{
Console.WriteLine("B constructor called");
}
}
问题是,当第一次调用 A.instance 并且如果 condition 为 true 并且调用 B() 构造函数时,由于某些原因我不这样做不明白程序的输出是“A constructor called”。
你能帮忙解释一下吗!
谢谢!
【问题讨论】:
-
在构造函数中调用虚函数可能是问题所在。为什么不尝试在单独的虚函数中写入输出?
-
condition值的设置是什么?您能否也将调用代码放入问题中,以便我们可以看到您所做的一切? -
这是一个非常大的遗留代码的精简版本,它只是为了举例说明。 reale 代码在虚方法中做了很多事情,不能移动到其他地方。
-
@MattJones 从环境变量中读取条件。调用代码只是调用 A.instance。
标签: c# inheritance constructor static