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

本文关键字:静态 初始化 编译 | 更新日期: 2023-09-27 18:02:21

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

这些似乎是相互依赖的,但在编译时变成了一个= false" Test = "hello",而不管顺序如何。我认为这与布尔值设置为false有关,但如果有人能解释一下这是如何编译的,那就太好了。

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

基于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"

可以编译,因为所有名称在作用域中都是可见的。它产生了您所经历的结果,因为变量的默认初始化为0和执行顺序。