奇怪的静态初始化在C#中编译

时间:2016-08-13 16:43:09

标签: c# static initialization

private static string Test = a ? "test" : "hello";
private static bool a = Test == "test";

这些似乎相互依赖,但在编译时变成了一个假的“Test =”你好“无论顺序如何。我认为这与布尔设置为假有关,但如果有人可以解释如何这编译会很好。

2 个答案:

答案 0 :(得分:4)

基于C#语言规范:

  

类的静态字段变量初始值设定项对应于a   以文本顺序执行的分配顺序   它们出现在课堂宣言中。

private static string Test = a ? "test" : "hello"; // a is false - default for bool

现在Test引用字符串“hello”

private static bool a = Test == "test"; // a remains false as Test != "test"

答案 1 :(得分:0)

这是编译因为所有名称在范围内都可见。它会产生您遇到的结果,因为变量的默认初始化为0和执行顺序。