2015-02-11 193 views
2

我想了解的C#語言,爲什麼你需要靜態類中的所有成員的靜態關鍵字。是的,我知道一個靜態類不能實例化,但爲什麼不是靜態類中的成員默認靜態,因爲我們知道一個靜態類不能有非靜態成員?C#靜態類 - 靜態類不能有非靜態成員

例如: 爲什麼不能這樣

public static class StaticClass 
{ 
    public static int numberTest = 2; 
} 

是:

public static class StaticClass2 
{ 
    public int numberTest = 2; 
} 
+0

靜態這個詞說了這一切。靜態方法不需要實例,並且該方法需要在沒有類實例的情況下訪問變量。 – 2015-02-11 08:48:25

+0

啊,是的,Eric Lippert的回答(在相關答案中)是相當權威的。 :) – 2015-02-11 09:05:52

+0

同意,通過其他線程與類似的問題,並理解它......只是奇怪的是,我發現問題之前我自己找不到它。 – DJJ 2015-02-11 09:08:34

回答

2

最可能出於歷史原因。你是對的,一個自動的,暗示的static會更符合語言的其他部分。

但是靜態類在C#2.0中是新的,並且變化必須是不中斷的。

+0

另外,如果某些成員不是靜態的,而是靜靜地改變這些成員的行爲,那麼將「靜態」修飾符添加到類聲明中會導致編譯錯誤。 – 2015-02-11 09:01:03

+0

@MatthewWatson - 它可能已經工作,但是靜態修飾符必須在成員上被禁止(與'interface'比較)。這將(類型)打破事實上爲C#1編寫的靜態類。 – 2015-02-11 09:01:11

+0

同意(我刪除了我以前的評論,因爲你在回覆,對不起!) – 2015-02-11 09:01:45

3

它是由語言設計者設計decission。當然一個static類只能有static成員,所以static限定符是冗餘。但是如果你不得不把它放在那裏,它會讓事情變得更加清晰,不容易出錯。當你的課程和項目變大時,這變得越來越重要。

+0

是的,我同意這是多餘的,因此這個問題......我作爲一個開發人員瞭解它在大型項目中很重要,但我只是想知道背後的原因。 – DJJ 2015-02-11 08:55:14

+0

在接口中,「public」修飾符是隱含的,不允許自己添加它。這裏似乎有一個平行的,有不同的選擇。 – 2015-02-11 08:56:28