1) 为什么即使没有其类的实例,成员常量也可用?
2) 由于编译器将常量变量替换为文字值,常量表达式需要在编译时完全求值的唯一原因是什么?
3) 由于 string 也是一个对象,我认为以下会产生错误,但事实并非如此。为什么?
class A
{
const string b = “it works”;
}
谢谢
最佳答案
常量(用
const
声明)是implicitly static - 因此不需要实例。const
值嵌入到声明它的程序集中,然后每次使用 时,该值也被复制到调用代码中。因此无法在执行时对其进行评估 - 如果您想要这种行为,请使用static readonly
。根据 C# 语言规范,字符串文字是常量值。基本上,IL 具有字符串的元数据表示,允许将它们指定为常量。字符串常量还有其他有趣的属性,例如 interning。
兴趣点:您可以在 C# 中将 decimal
字段声明为 const
,但这并不真的有 CLR 支持。 .. 没有文字形式。 C# 编译器使用 [DecimalConstant]
属性伪造它。这就是为什么不能使用 decimal 作为属性参数类型的原因。
关于c# - 为什么即使没有其类的实例,成员常量也可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3040516/