7

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

4

3 回答 3

8

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

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

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

于 2012-06-27T19:31:50.347 回答
7

好吧,这就是静态构造函数的全部意义所在;它与继承无关。

引用MSDN

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

您可以声明它们的主体,但不必担心何时调用它们(框架在这方面也没有给您任何保证,除非它在创建手头的任何类实例之前运行)。

编辑

哦,还有一些你应该注意的事情,它与泛型有关,尽管它可能很明显。

考虑这个片段:

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

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

typeof(Foo<Bar>) != typeof(Foo<Baz>)
于 2012-06-27T19:32:08.493 回答
-1

Derived 类的静态构造函数首先被调用,因为它是在 Base 类之前加载的。当类加载到内存中时调用构造函数。

于 2014-02-02T17:52:04.793 回答