2009-04-20 28 views
0

我在看一些我剛剛繼承的vb.net代碼,無法理解爲什麼最初的開發人員會這樣做。爲屬性集合配置並完成處理?

基本上,每個「域」類是屬性的集合。每個實現IDisposable.Dispose,並重寫Finalize()。沒有基類,所以每個只是擴展對象。

Dispose將每個private var設置爲Nothing,或者在屬性是另一個域對象時調用_private.Dispose。有一個私人變量跟蹤處置狀態,並且Dispose中的最後一件事情是GC.suppressFinalize(Me)

Finalize只調用Me.Dispose和MyBase.Finalize。

這有什麼好處嗎?有什麼傷害?沒有未管理的資源,沒有數據庫連接,似乎不需要這些。

回答

3

這讓我覺得是VB6模式。

我敢打賭,這個傢伙是直接從VB6來的,也許在.NET早些時候,當這些模式沒有被廣泛理解時。

還有一種情況是在調用Dispose時將一個內部引用設置爲無用:當成員標記爲Withevents時。如果沒有這一點,你可能會有一個未收集的對象處理事件,當它真的不應該再這樣做時。

+0

對於事件提及 – Randolpho 2009-04-20 15:04:34

0

在我看來,這是根本不需要的東西,尤其是沒有未管理的資源和數據連接。

如果您碰巧能夠清理併發布代碼,我們可能會獲得更多洞察,但實際上我看不到需要它。

0

根據對象的大小以及它們被創建/銷燬的頻率,可能會確保GC儘可能早地發生。

這可能是,這種模式已被用於其他項目,它仍然不理解爲什麼它被用於首位。 Monkey Gardeners

0

我能看出來的唯一原因 - 這在最好的情況下是可疑的 - 就是如果這些東西在「食物鏈」中被創造並處置得更高,並且這些東西有可能存在域類在某個時刻具有有限或非託管資源。

即使這很粗略......它聽起來像某人來自不受管理的背景,並且正在尋找.NET來管理你的內存,並遇到了接口IDisposable