我有三个班级Base
,Derived
和Final
。Derived
源自Base
和Final
源自Derived
。所有三个类都有一个静态构造函数。类Derived
作为一个名为Setup
. 当我调用 时Final.Setup
,我希望所有三个静态构造函数都被执行,但只有一个 inDerived
被运行。
这是示例源代码:
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
. 但我想知道:这种明显奇怪的行为背后的原因是什么?