2010-02-22 130 views
5

我有一個類,其中的存根如下所示。代碼分析抱怨如果我不刪除公共構造函數。但我很好奇爲什麼在密封課堂上這是必要的?下面顯示的特定類只包含靜態方法。爲什麼包含一個私有構造函數只是爲了刪除公有的構造函數會是一個好習慣?密封類 - 爲什麼要刪除公共構造函數?

public sealed class ParseFile 
    { 
     /// <summary> 
     /// Remove the public constructor to satisfy CA1053. 
     /// </summary> 
     private ParseFile() 
     { 
     } 
    } 

回答

11

您沒有得到此警告,因爲該類是密封的,但因爲它是(有效)靜態類。

公共構造函數意味着該類有實例方法 - 不應該以其他方式進行廣告的類。

6

如果你有一個類,只有 共享的方法,爲什麼你需要 創建它的一個實例?

只有共享 方法的類的一個示例是System.Math類。它 有一個私人的構造函數,因爲它增加了 沒有好處(它沒有任何意義)爲 它是可創建的。

編輯:來源http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77

的問題是,爲什麼我應該把它變成私有的,但爲什麼要留下來公開。始終授予它所需的最低訪問權限。

+1

您忘記了包含源代碼鏈接:http://social.msdn.microsoft.com/Forums/en-US/vstscode/thread/8addbc70-f720-4d0b-85ce-2bdf52e32f77 – 2010-02-22 15:41:16

+1

true(blush)...儘管如此,我還是有一點...... – anthares

14

如果只有靜態方法,則將其聲明爲靜態類,並停止擔心構造函數。

public static class ParseFile 
{ 
} 
2

具有所有靜態方法的類從不需要構造函數,因爲它沒有用新關鍵字實例化。所以你不需要公共構造函數。

3

密封不同於靜態。靜態類意味着你不能用new關鍵字創建一個類的實例。密封的類意味着你不能創建一個繼承它的類。

+0

好點。我忽略了這一點。 –

+2

您可能已經知道這一點,但'static'是用於聲明「密封抽象」類的C#糖。 :)由於密封的抽象類型的實例成員永遠不會被調用,C#語言規範添加了附加的限制,即該類型只包含靜態成員。 –

+0

@ 280Z28你確定?我試過聲明一個密封的抽象類,並得到一個編譯錯誤,指出抽象類不能被密封或靜態 – Pedro

相關問題