C#静态构造函数排序[关闭]

Posted

技术标签:

【中文标题】C#静态构造函数排序[关闭]【英文标题】:C# static constructor ordering [closed] 【发布时间】:2011-11-05 22:39:42 【问题描述】:

我很好奇静态和实例构造函数的触发顺序。有人可以告诉我火下构造函数的顺序来帮助我吗?

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

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();

【问题讨论】:

你没有编译器吗? LinqPad 可以轻松测试这样的代码。 【参考方案1】:

顺序是: C、B、A 静态演员。 A、B、C、默认角色:

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

【讨论】:

【参考方案2】:
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

【讨论】:

对于静态构造函数的执行顺序,这种行为背后的解释是什么? 查看我的回答中的更新以获取有关此主题的更多背景信息。 我需要一个简单易懂的解释。

以上是关于C#静态构造函数排序[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

C# 静态构造函数

C# 静态类构造函数

请教一下C#中父类静态构造函数在子类中为啥不会和子类的静态构造函数一起执行

C#静态构造函数

C# 构造函数总结

C#静态类,构造函数带参数