派生类中的静态构造函数首先被调用,然后是基类

Lea*_*ner 7 .net c#

我想知道,一般在C#中,构造函数的概念是,基类缺点首先应该执行,但为什么我看到派生类静态构造函数被调用然后基类缺点.有人可以解释一下吗?:(

lad*_*dge 8

静态构造函数初始化类本身,也就是说必须在访问任何其他静态成员之前,以及在创建类的任何实例之前调用它们.

至于在类层次结构中调用静态构造函数的顺序,您应该考虑未定义.从静态构造函数MSDN页面:

用户无法控制何时在程序中执行静态构造函数.


s.m*_*.m. 7

那么,这就是静态构造函数的重点; 它与继承无关.

引用MSDN

在创建第一个实例或引用任何静态成员之前,会自动调用静态构造函数来初始化类.

你可以声明自己的身体,而不必担心何时会被调用(也不框架给你任何保证在这方面,但它在手之类的任何实例之前运行已创建).

编辑

哦,还有一些你应该注意的东西,它与泛型有关,即使它可能是显而易见的.

请考虑以下代码段:

class Foo<T> {
    static Foo() {
        Console.WriteLine("Danger, Will Robinson!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这里静态构造函数将被执行T,因为当然:

typeof(Foo<Bar>) != typeof(Foo<Baz>)
Run Code Online (Sandbox Code Playgroud)