在这个片段中:

class ClassWithConstants
{
    private const string ConstantA = "Something";
    private const string ConstantB = ConstantA + "Else";

    ...

}

是否有以 ConstantB == "Else" 结尾的风险?还是分配是线性发生的?

最佳答案

你总是会得到“Something Else”。这是因为 ConstantB 依赖于 ConstantA。

你甚至可以切换线路,你会得到相同的结果。编译器知道 ConstantB 依赖于 ConstantA 并且会相应地处理它,即使您在部分类中编写它。

为了完全确定您可以运行 VS 命令提示符并调用 ILDASM。在那里你可以看到实际的编译代码。

此外,如果您尝试执行以下操作,您将收到编译错误:

private const string ConstantB = ConstantA + "Else";
private const string ConstantA = "Something" + ConstantB;

错误 :'ConsoleApplication2.Program.ConstantB' 常量值的评估涉及循环定义
这种证明编译器知道它的依赖关系。

添加: Jon Skeet 指出的规范引用:

关于C#:这个字段分配安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1287842/

10-13 07:08