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