C#静态构造函数排序

时间:2011-08-29 10:48:53

标签: c# .net 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");
    }
}

以下声明的输出结果如何:

C c = new C();

2 个答案:

答案 0 :(得分:3)

订单是: C,B,A静态ctors。 A,B,C,默认ctors:

更新:另请参阅Eric Lippert撰写的这篇精彩博文(Part1Part2),了解为什么静态类初始化程序的运行顺序与ctors相反。

答案 1 :(得分:3)

I am in C's Static Constructor
I am in B's Static Constructor
I am in A's Static Constructor
I am in A's Default Constructor
I am in B's Default Constructor
I am in C's Default Constructor