2011-03-31 76 views
3

我喜歡將C#代碼的註釋和Xml文檔保留得非常少。傾向於在可能的情況下使代碼自行記錄。爲什麼C#析構函數需要具有XML文檔?

但是,如果我不在公共類的析構函數上放置Xml註釋,C#編譯器會發出警告。爲什麼是這樣?

是否有一些有用的信息,我應該將這些信息放到Xml註釋中,我從來沒有這樣做過。我從來沒有發現自己需要閱讀析構函數的註釋。編譯器是否過於熱心?

+4

@Reed:順便說一句,這是C#中的「析構函數」,而不是終結器。請參閱規範的第10.13節,該部分開始於「*析構函數是實現破壞類實例所需的操作的成員。*」許多人認爲這是一個不好的名稱選擇,我同意。 「終結者」本來會更好。但他們被稱爲析構函數,在C#中,而不是終結器。 – 2011-03-31 16:03:18

+1

@Reed微軟不同意我認爲:http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx – 2011-03-31 16:03:40

+4

@Reed:它取決於你閱讀的規範的版本。 ECMA規範涉及終結器,但MS規範仍然指向析構函數。 – 2011-03-31 16:04:27

回答

2

如果您打開XML Doc註釋,編譯器會要求您記錄API中的所有內容。析構函數是API的一部分,真的應該包括在內。

一個析構函數通常應該只存在於IDisposable類中,並且記錄下來有助於發信號/提醒人們在對象上調用Dispose(),因爲這樣做(如果正確實施)將顯着降低GC壓力。

0

對於任何使用您的代碼的人來說,確切知道終結器的功能可能會有所幫助。換句話說,如果你正在處理大量的非託管資源,那麼當文檔清楚地說明你的類在釋放這些資源時如何處理這些資源會很有幫助。

0

它堅持認爲,因爲您的課程是公開的,並且C#析構函數最終會覆蓋從程序集外部可見的protected method

+0

不,在C#中,Finalize()的可見性甚至比私有的更小。對於析構函數也是如此,即使在課堂內部也無法調用/查看它。 – 2011-03-31 16:13:43

+1

您的程序集可能會被C#以外的其他語言重複使用。 – 2011-03-31 16:15:55

1

我懷疑,儘管我沒有證據,但警告只是因爲它在所有未標記爲私有的方法上查找doc註釋而引發。我懷疑有一個特定的規則,即析構函數特別需要評論。

相關問題