我想知道,一般在C#中,构造函数的概念是,基类缺点首先应该执行,但为什么我看到派生类静态构造函数被调用然后基类缺点。有人可以解释一下吗? :(
答案 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类之前加载的。当类加载到内存中时,将调用构造函数。