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#语言规范:
类的静态字段变量初始化式对应于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和执行顺序。