c# - C#中初始化顺序的规则是什么?

标签 c#

<分区>

Possible Duplicate:
What is the static variable initialization order in C#?

为了好玩,我跑了 this code

我没想到 2 2 3。我期待编译器错误(循环依赖)或 8 5 3

C# 中初始化顺序的规则是什么?

-编辑- i tried making a not static我得到了我所期望的。为什么 b 以前是 2 现在是 5。我不认为我会喜欢这些规则...幸运的是我从来没有做过这样的事情所以我没有遇到问题。

using System;

public class Test
{
        public static void Main()
        {
                A.t();
        }
}

class A
{
    static int a = B.b + c;
    public static int c = 3;
    static public void t()
    {
        Console.WriteLine("{0} {1} {2}", a, B.b, c);
    }
}
class B
{
    public static int b = A.c+2;
}

最佳答案

初始化是在需要时按类型进行的(尽管有 beforefieldinit)。使用类:“文本顺序”:

ECMA 334 中的§17.11:

If a class contains any static fields with initializers, those initializers are executed in textual order immediately prior to executing the static constructor.

它不适用于实例字段,因为您不能在字段初始值设定项中使用实例值。

关于c# - C#中初始化顺序的规则是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9335310/

相关文章:

c# - 如何阻止 MainWindow 关闭整个应用程序

c# - 在 OnActionExecuting 中重定向不起作用

c# - 后台 worker C# winform

c# - 当T本身是类型时,为什么必须使用typeof(T)来获得Type?

c# - 在 C# 中使用反射在运行时调用 ToList() 方法

c# - asp.net 可以有 <tbody id ="blah"runat ="server"> 吗?

c# - C# 中的 IDisposable 接口(interface)

c# - 有没有办法根据 C# 对象的属性自动形成长 MySql INSERT 命令?

c# - 找不到为 MVC 5 DropDownListFor 添加占位符的方法

c# - 向 MSMQ 发送序列化数据时抛出 InvalidCastException