【发布时间】:2011-09-24 02:51:47
【问题描述】:
我有三个班级,Base、Derived 和 Final。 Derived 派生自 Base 和 Final 派生自 Derived。所有三个类都有一个静态构造函数。将Derived 类为称为Setup 的公共静态方法。当我调用Final.Setup 时,我希望所有三个静态构造函数都会执行,但只有Derived 中的一个会运行。
这里是示例源代码:
abstract class Base
{
static Base()
{
System.Console.WriteLine ("Base");
}
}
abstract class Derived : Base
{
static Derived()
{
System.Console.WriteLine ("Derived");
}
public static void Setup()
{
System.Console.WriteLine ("Setup");
}
}
sealed class Final : Derived
{
static Final()
{
System.Console.WriteLine ("Final");
}
}
这对我来说只是部分意义。我知道调用Final.Setup() 实际上只是Derived.Setup() 的别名,所以跳过Final 中的静态构造函数似乎很公平。但是,为什么不调用Base 的静态构造函数呢?
我可以通过调用Base 的无操作静态方法或访问Base 的一些虚拟静态方法来解决此问题。但我想知道:这种明显奇怪的行为背后的原因是什么?
【问题讨论】:
-
相关的,不是重复的:stackoverflow.com/questions/6390960/…
标签: c# static-constructor