2009-05-29 52 views
1

我開始搞亂FXCop對我的一些組件,並注意到一些有趣的事情,我試圖把我的頭圍繞。FXCop:「自己的一次性領域的類型應該是一次性的」

「即宣佈一次性成員 類型也應該實現IDisposable。如果 類型不擁有任何非託管資源 ,不就可以實現一個 終結。」

我有我自己的類,其中包含一些控制,繼而從System.Web.UI.WebControls.Button繼承。它並不是抱怨我繼承的按鈕,但是包裝它們的類是。

這裏有什麼影響或危險?

回答

1

包含按鈕的類的本質是什麼?

正常情況下,我只希望一個複合控件的類具有其他控件作爲成員。這樣的類通常直接或間接地從System.Web.UI.CompositeControl或System.Web.UI.WebControl繼承,並且您作爲成員的控件應添加到Controls集合中。

這樣做將確保它們被妥善處理,並且應該擺脫FxCop警告。

發佈有關該課程的更多詳細信息,如果這沒有幫助。

+0

優秀的一點,我想我會走這條路。謝謝! – Chris 2009-05-29 18:30:56

4

如果您的類包含IDisposable類型,但您的類不是IDisposable類型,那麼當您的類的實例不再需要時,類中的IDisposable類型不會按時釋放/釋放。 Dispoble類型應該在您不再需要時立即處理,這樣資源就可以被釋放。如果你不這樣做,你必須等到GC啓動後才能釋放資源。

2

如您所知,當您完成使用一次性物品時,應該調用其方法Dispose

當您從這些控件繼承時,仍然可以調用Dispose方法。但是如果你製作一個包裝,那麼你的包裝類的用戶應該能夠調用Dispose

public void Dispose() { 
    button.Dispose(); 
    // any other thing that is disposable 
}