为什么即使没有类的实例,成员常量也可用?

时间:2010-06-14 20:09:58

标签: c#

1)为什么即使没有类的实例,成员常量也可用?

2)由于编译器用常量变量替换常量变量,是否需要在编译时完全计算常量表达式的唯一原因?

3)由于string也是一个对象,我认为以下会产生错误,但事实并非如此。为什么呢?

class A
{
    const string b = “it works”; 
}

谢谢

1 个答案:

答案 0 :(得分:7)

  1. 常量(用const声明)是implicitly static - 因此不需要实例。

  2. const值嵌入在它声明的程序集中,然后每次使用时,该值也会复制到调用代码中。因此,无法在执行时对其进行评估 - 如果您需要该行为,请使用static readonly

  3. 根据C#语言规范,字符串文字是常量值。基本上,IL具有字符串的元数据表示,允许将它们指定为常量。字符串常量还有其他有趣的属性,例如 interning

  4. 有一点兴趣:您可以在C#中将decimal字段声明为const,但

    } 。 C#编译器使用[DecimalConstant]属性伪造它。这就是为什么你不能使用十进制作为属性参数类型。