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