【问题标题】:Strange static initialization compiles in C# [duplicate]奇怪的静态初始化在 C# 中编译 [重复]
【发布时间】:2016-08-13 16:43:08
【问题描述】:
private static string Test = a ? "test" : "hello";
private static bool a = Test == "test";

这些似乎相互依赖,但在编译时变为 a = false" Test = "hello" 无论顺序如何。我认为这与布尔值设置为 false 有关,但如果有人可以解释如何这样编译就好了。

【问题讨论】:

标签: c# static initialization


【解决方案1】:

基于 C# 语言规范之一:

类的静态字段变量初始化器对应于 以文本顺序执行的任务序列 它们出现在类声明中。

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

现在测试引用字符串“hello”

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-22
      • 1970-01-01
      • 2018-06-26
      • 2011-05-22
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多