C# 静态构造函数排序

Ris*_*hri 1 .net c# oop inheritance

我很好奇静态和实例构造函数的触发顺序。有人可以帮助我让我知道下面的构造函数按什么顺序触发吗?

对于静态构造函数的执行顺序,这种行为背后的解释是什么?

class A
    {
        static A()
        {
            Console.WriteLine("I am in A's Static Constructor");
        }
        A()
        {
            Console.WriteLine("I am in A's Default Constructor");
        }
    }

class B:A
{
    static B()
    {
        Console.WriteLine("I am in B's Static Constructor");
    }
    B()
    {
        Console.WriteLine("I am in B's Default Constructor");
    }
}
class C:B
{
    static C()
    {
        Console.WriteLine("I am in C's Static Constructor");
    }
    C()
    {
        Console.WriteLine("I am in C's Default Constructor");
    }
}
Run Code Online (Sandbox Code Playgroud)

以下语句的输出是什么:

C c = new C();
Run Code Online (Sandbox Code Playgroud)

Seb*_*ter 5

顺序是:C、B、A 静态因子。A、B、C,默认因子:

更新:另请参阅 Eric Lippert 的这篇精彩博客文章(第 1 部分和第 2 部分),了解为什么静态类初始值设定项以与构造函数相反的顺序运行。