在这个片段中:
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/