【问题标题】:Why can't we define a constant variable as static? [duplicate]为什么我们不能将常量变量定义为静态变量? [复制]
【发布时间】:2013-05-15 14:42:05
【问题描述】:
public static const string Var1 = "abc";//compile time error
public static readonly string Var2 = "def";

为什么我们不能将常量定义为静态?

【问题讨论】:

  • 此外,存在“常量变量”这样的想法是自相矛盾的。 “常量”和“变量”是对立的。

标签: c# vb.net


【解决方案1】:

常量已经是静态的,所以这将是多余的并且在编译时被解析。

例如:

const X = 5;
int a = X + X;

基本上结束为:

int a = 5 + 5;

但是,编译器优化器会解决问题并实际发出 10。

查看这里了解更多信息 - http://msdn.microsoft.com/en-us/library/ms173119(v=vs.80).aspx

【讨论】:

  • 它们不会不复存在——它们仍然是类的一部分,可以通过反射等找到。
  • @JonSkeet Ahh 真的,我一直以为他们被编译出来了。很有趣。
  • 另外,您必须在声明时为 const 分配一个值,并且这不能更改,使用标准静态变量,可以在任何时候分配 calue,因此 const int a=5;//fine a=20; //不允许
  • @AliK Yeh,你可以用 readonly 来伪装 const 一个 static,这对某些类型很有用。
  • 在方法内部定义时它们永远不会被发射,在方法外部会发射 const 但不会从代码中引用值。在上述情况下,无论哪种方式,它都会发出文字“10”。
【解决方案2】:

const 字段已经 static
在您使用它的任何地方,它的字面值都嵌入在生成的 IL 中。
在声明点添加 static 关键字将是多余的。

【讨论】:

  • 啊,所以如果 public static readonly intpublic const int 都被第二个程序集引用。如果仅使用值更改重新编译声明程序集,则在更改值时它们将表现出不同的行为。
【解决方案3】:

来自Static Classes and Static Class Members (C# Programming Guide)

虽然不能将字段声明为static const,但const 字段的行为本质上是静态的。它属于类型,而不是类型的实例。因此,可以使用与静态字段相同的 ClassName.MemberName 表示法来访问 const 字段。不需要对象实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    相关资源
    最近更新 更多