1
1)即使没有其类的实例,为什么成员常量可用?即使没有其类的实例,为什么成员常量可用?
2)由于编译器将常量变量替换为文字值,编译时需要对常量表达式进行全面评估的唯一原因是什么? 3)由于字符串也是一个对象,我认为以下会产生一个错误,但它不会。为什么?
class A
{
const string b = “it works”;
}
谢谢
1)即使没有其类的实例,为什么成员常量可用?即使没有其类的实例,为什么成员常量可用?
2)由于编译器将常量变量替换为文字值,编译时需要对常量表达式进行全面评估的唯一原因是什么? 3)由于字符串也是一个对象,我认为以下会产生一个错误,但它不会。为什么?
class A
{
const string b = “it works”;
}
谢谢
常数(与const
声明)是implicitly static - 因此不需要一个实例。
甲const
值被嵌入在它被声明在装配,然后每它的时使用,则该值被复制到调用代码。因此无法在执行时评估 - 如果您需要该行为,请使用static readonly
。
根据C#语言规范,字符串文字是常数值。基本上IL有一个字符串的元数据表示,允许它们被指定为常量。字符串常量还有其他有趣的属性,如,内部为。感兴趣
一点:你可以声明decimal
场在C#const
,但这并不真的有CLR支持...有没有文字形式。 C#编译器使用[DecimalConstant]
属性来伪造它。这就是为什么你不能使用十进制作为属性参数类型。
正如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
@Johannes:我只是在挖这个帖子:) – 2010-06-14 20:13:28
在这些评论中,周五意味着星期四。 – 2010-06-14 20:19:24