我有三个班级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. 但我想知道:这种明显奇怪的行为背后的原因是什么?