C# 派生的。<;来自基础的静态变量>;不';t调用派生的';s静态构造函数

C# 派生的。<;来自基础的静态变量>;不';t调用派生的';s静态构造函数,c#,constructor,static,C#,Constructor,Static,为什么在下面的代码中没有调用派生中的静态构造函数 class Base { public static Base Instance; static Base() { Console.WriteLine("Static Base invoked."); } } class Derived : Base { static Derived() { Instance = new Derived(); Console.WriteLine("Sta

为什么在下面的代码中没有调用派生中的静态构造函数

class Base
{
    public static Base Instance;
    static Base() { Console.WriteLine("Static Base invoked."); }
}

class Derived : Base
{
    static Derived() { 
        Instance = new Derived();
        Console.WriteLine("Static Derived invoked."); 
    }
}

void Main()
{
    var instance = Derived.Instance;
}

OUTPUT:
Static Base invoked.

这是因为通过派生类访问基类的静态成员实际上是通过基类(声明该成员的基类)进行编译的

因此,这:

Derived.Instance
实际上是这样编译的:

Base.Instance
因此,没有代码与派生的相接触,这就是它的静态构造函数没有被调用的原因

以下是编译主方法的方式(发布):


这是因为通过派生类访问基类的静态成员实际上是通过基类(声明该成员的基类)进行编译的

因此,这:

Derived.Instance
实际上是这样编译的:

Base.Instance
因此,没有代码与派生的相接触,这就是它的静态构造函数没有被调用的原因

以下是编译主方法的方式(发布):


我在C#规范中找不到正确的段落。我很确定它就在那里,我只是找不到合适的短语来搜索。我在C#规范中找不到合适的段落。我很确定它就在那里,我就是找不到合适的短语来搜索。