2013-05-15 123 views
2
public static const string Var1 = "abc";//compile time error 
public static readonly string Var2 = "def"; 

爲什麼我們不能將一個常量定義爲靜態?爲什麼我們不能將常量變量定義爲靜態變量?

+1

你爲什麼想要? – dbasnett

+3

另外,有這樣一個事物作爲「常量變量」的想法是自相矛盾的。 「常量」和「變量」是相反的。 –

回答

16

常量已經是靜態的,所以這將是多餘的,並在編譯時解析。

例如:

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

基本上編譯爲:

int a = 5 + 5; 

在這裏看到更多的信息 - http://msdn.microsoft.com/en-us/library/ms173119(v=vs.80).aspx

+5

他們不會停止存在 - 他們仍然是類的一部分,可以找到反射等。 –

+1

@JonSkeet啊真的,我一直認爲他們已經編譯出來。有趣的知道。 – Lloyd

+0

你也必須在聲明中爲const指定一個值,並且這個值不能被改變,用一個標準的靜態變量calue可以在任何時候賦值,所以const int a = 5; // fine a = 20; //不允許 – AliK

2

一個const領域已經static
無處不在您使用它,它的文字值嵌入在生成的IL中。
在聲明處添加static關鍵字將是多餘的。

+0

啊,所以如果一個'public static readonly int'和一個'public const int'都被第二個程序集引用。如果只有聲明程序集重新編譯了值更改,它們將在值更改時顯示不同的行爲。 – weston

2

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

雖然現場不能被聲明爲static const,一個const場是在它的行爲基本上是靜態的。它屬於類型,而不屬於類型的實例。因此,可以使用用於靜態字段的相同ClassName.MemberName表示法來訪問const字段。沒有對象實例是必需的。