2010-01-27 97 views
7

我懷疑靜態類可以包含一個私有構造函數。我們可以在靜態類中使用私有構造函數嗎?

+6

如果你有Visual Studio的(或類似)的安裝,我的猜測是,它會帶你不到1分鐘來編譯和檢查自己這一點... – 2010-01-27 09:39:44

+3

約翰,這是沒有理由不問這個問題。查看常見問題。 – 2010-01-27 09:47:04

回答

6

靜態類不能有任何實例構造函數(請參閱CS0710),無論是公共,私有,受保護或內部。

有關更多信息,請參閱以下文章。

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

+0

@jonathan:我在Reflector中查看'public static class',但只能找到'private static void .cctor()'靜態構造函數。這個私人實例構造函數在哪裏? – 2010-01-27 09:28:05

5

什麼會此構造嗎?該類是靜態的,所以它從來沒有實例化。你可以在非靜態類上有一個靜態構造函數來初始化靜態字段,但是在靜態類上,唯一有意義的構造函數是靜態構造函數,並且被稱爲CLR。

加成Jon Skeet posted an article對靜態類的初始化的時間(通常它的初始化在第一次使用,但有時你想在程序啓動時進行初始化),並在.NET 4 可能變化。

+0

@Jonathan Wow,這很奇怪。我試圖想想如何有用,但他們取而代之,我認爲他們有相同的結論:) – 2010-01-27 09:16:37

+0

@Jonathan告訴CLR一個_static_類不能被實例化爲Real嗎? – 2010-01-27 09:22:09

3

您的疑問是正確的。

一個靜態類只能有一個靜態構造函數,而public/private不適用,因爲你的代碼永遠不能調用這個構造函數(CLR)。

因此,您不能在靜態構造函數上使用訪問修飾符(public/private/...)。

2

規則是靜態類不能有實例構造

相關問題