2013-07-11 108 views
2

這些天,我只是在OOPS上做一些頭腦風暴,突然之間出現了一個問題。我發現它是相關的,所以我決定問社區。問題是:靜態構造函數不能有返回類型,但靜態方法必須在C#中有返回類型

靜態構造函數不能有返回類型(int,字符串等),但靜態方法必須在C#中有返回類型。

c#編譯器如何區分通過編譯傳遞的情況?

static Class staticClass 
{ 
    public static staticClass(){} //right 

    public static int staticClass(){} //wrong 

    public static int staticMethod(){} //right 
} 

回答

3

靜態構造函數不能有返回類型(INT,字符串等)

正確的。但(靜態)構造函數不需要返回任何東西。

但靜態方法必須在C#中有返回類型。

錯誤。靜態方法很可能是一種無效的方法。

如何C#編譯器區分...

static class StaticClass 
{ 
    public static StaticClass(){} //right : Wrong. 'public' is not allowed. 

    public static int StaticClass(){} //wrong : Indeed wrong. Member cannot have same name as class 

    public static int StaticMethod(){} //right 
} 
+0

對於第二句,關鍵在於有一些語法指示代碼塊返回的內容,即使它沒有明確表示,當它是一種方法。第二個例子被解釋爲一個與該類名稱相同的方法,這正是因爲它具有已定義的返回類型(如果它是'void',你會得到一個類似的錯誤)。解析器認爲第一個示例是具有多餘可訪問性修飾符的靜態構造函數,而不是具有缺少返回類型的成員,因爲沒有返回類型。 – Servy

+0

是的, 我的排字錯誤public static StaticClass(){} //是錯的,我們不能在靜態構造函數中有修飾符 –

0

靜態構造函數是構造函數的類型意味着將不會有任何返回類型原因,拳類對象初始化過程中調用。但是靜態方法是用類的名稱調用的方法。假設你有一個類A,你有一個方法static string display(),那麼你可以調用A.display()。因爲靜態方法對於一個類的所有對象都是通用的。要了解更多關於構造函數和他的類型檢查這個URL constructors-net-using-csharp-singleton-pattern/