【问题标题】:C# static constructor ordering [closed]C#静态构造函数排序[关闭]
【发布时间】: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 可以轻松测试这样的代码。

标签: c# .net oop inheritance


【解决方案1】:

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

更新:另请参阅 Eric Lippert 的这篇精彩博文(Part1Part2),了解为什么静态类初始化程序的运行顺序与 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
    

    【讨论】:

    • 对于静态构造函数的执行顺序,这种行为背后的解释是什么?
    • 查看我的回答中的更新以获取有关此主题的更多背景信息。
    • 我需要一个简单易懂的解释。
    猜你喜欢
    • 1970-01-01
    • 2011-10-07
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2014-03-14
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多