什么时候在C#中调用静态构造函数?

当我有包含一个静态构造函数的类,当包含该类的程序集是第一次加载或当该类的第一个引用命中时调用该构造函数?

当class级第一次被访问时。

静态构造函数(C#编程指南)

静态构造函数用于初始化任何静态数据,或执行需要仅执行一次的特定操作。 它在创build第一个实例或引用任何静态成员之前自动调用。

虽然直接的文档,但它不像你所期望的那么简单。 Jon Skeet的文章http://csharpindepth.com/Articles/General/Beforefieldinit.aspx详细讨论了这个问题。;

概要:

静态构造函数保证在第一次引用该类的成员之前立即执行 – 无论是创build实例还是自己的静态方法/类的属性。

请注意,静态initilaizers(如果没有静态构造函数)保证在第一次引用特定字段之前的任何时候执行。

在使用类中的任何东西之前调用静态构造函数,但是到底什么时候发生这种情况取决于实现。

保证在第一个静态成员被访问之前和第一个实例被创build之前被调用。 如果这个类从来没有使用过,那么静态构造函数就不能保证被调用。

在从父类调用静态方法的情况下,静态构造函数将不会被调用,并且明确指定。 这里是一个例子,如果调用b.methoda(),则不会调用构造函数。

static void Main(string[] args) { b.methoda(); } class a { public static void methoda() { //using initialized method data } } class b : a { static b() { //some initialization } }