在Visual Studio中,當I型行 「Implements IDisposable
」,則IDE自動添加:VB.NET - 實現IDisposable時應該添加Finalize方法嗎?
- 一個
disposedValue
成員變量 - 一個
Sub Dispose() Implements IDisposable.Dispose
- 一個
Sub Dispose(ByVal disposing As Boolean)
的Dispose()
應單獨留下,清理代碼應放入Dispose(disposing)
。
但Dispose Finalize Pattern說你也應該覆蓋Sub Finalize()
來致電Dispose(False)
。爲什麼IDE不添加這個?我必須自己添加它,還是以某種方式隱式地調用?
編輯:任何想法爲什麼IDE會自動添加80%的所需材料,但遺漏了Finalize方法?是不是這種功能全點幫你
不是忘記這些東西?
編輯2:謝謝大家的出色答案,這現在非常有意義!
實施處置並不意味着你應該實現一個終結器。您可以在Dispose方法中釋放非託管資源,而不需要終結器。如果你必須實現一個終結器,那麼你的實際清理邏輯應該在一個獨立的函數中,這個函數既可以處理也可以最終確定調用。 – 2008-10-17 08:55:50
這是不正確的。如果您完全依賴Dispose()來釋放非託管資源,則在未調用Dispose的情況下內存將泄漏。這正是終結者的存在。 – Laurent 2009-07-31 09:45:14
不知道爲什麼我之前沒有注意到Scott的評論 - 一定沒有注意到它,但是Laurent是對的 - 如果您的Dispose正在清理非託管資源,則需要進行Finalize以確保安全。不要因爲懶惰而放棄它。 – 2009-07-31 12:07:10