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

时间:2012-06-27 19:25:02

标签: c# .net

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

3 个答案:

答案 0 :(得分:8)

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

对于类层次结构中对静态构造函数的调用的顺序,您应该考虑未定义。来自MSDN page on static constructors

  

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

答案 1 :(得分:7)

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

引用MSDN

  

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

你可以声明他们的身体,但不需要担心什么时候会被调用(框架也没有在这方面给你任何保证,除了它在任何实例之前运行已经创建了手头的课程。)

修改

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

请考虑以下代码段:

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

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

typeof(Foo<Bar>) != typeof(Foo<Baz>)

答案 2 :(得分:-1)

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