【发布时间】:2013-05-15 14:42:05
【问题描述】:
public static const string Var1 = "abc";//compile time error
public static readonly string Var2 = "def";
为什么我们不能将常量定义为静态?
【问题讨论】:
-
此外,存在“常量变量”这样的想法是自相矛盾的。 “常量”和“变量”是对立的。
public static const string Var1 = "abc";//compile time error
public static readonly string Var2 = "def";
为什么我们不能将常量定义为静态?
【问题讨论】:
常量已经是静态的,所以这将是多余的并且在编译时被解析。
例如:
const X = 5;
int a = X + X;
基本上结束为:
int a = 5 + 5;
但是,编译器优化器会解决问题并实际发出 10。
查看这里了解更多信息 - http://msdn.microsoft.com/en-us/library/ms173119(v=vs.80).aspx
【讨论】:
const 字段已经是 static。
在您使用它的任何地方,它的字面值都嵌入在生成的 IL 中。
在声明点添加 static 关键字将是多余的。
【讨论】:
public static readonly int 和 public const int 都被第二个程序集引用。如果仅使用值更改重新编译声明程序集,则在更改值时它们将表现出不同的行为。
来自Static Classes and Static Class Members (C# Programming Guide):
虽然不能将字段声明为
static const,但const字段的行为本质上是静态的。它属于类型,而不是类型的实例。因此,可以使用与静态字段相同的 ClassName.MemberName 表示法来访问 const 字段。不需要对象实例。
【讨论】: