2010-06-14 46 views
1

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

2)由于编译器将常量变量替换为文字值,编译时需要对常量表达式进行全面评估的唯一原因是什么? 3)由于字符串也是一个对象,我认为以下会产生一个错误,但它不会。为什么?

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

谢谢

回答

7
  1. 常数(与const声明)是implicitly static - 因此不需要一个实例。

  2. const值被嵌入在它被声明在装配,然后每它的时使用,则该值被复制到调用代码。因此无法在执行时评估 - 如果您需要该行为,请使用static readonly

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

一点:你可以声明decimal场在C#const,但这并不真的有CLR支持...有没有文字形式。 C#编译器使用[DecimalConstant]属性来伪造它。这就是为什么你不能使用十进制作为属性参数类型。

+2

正如Eric Lippert上周五所说:http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx – Joey 2010-06-14 20:12:34

+0

@Johannes:我只是在挖这个帖子:) – 2010-06-14 20:13:28

+0

在这些评论中,周五意味着星期四。 – 2010-06-14 20:19:24

相关问题