Dot-Net
垃圾收集器會為我呼叫 IDisposable.Dispose 嗎?
.NET IDisposable 模式 意味著,如果您編寫終結器並實現 IDisposable,則終結器需要顯式呼叫 Dispose。這是合乎邏輯的,也是我在極少數需要終結器的情況下一直做的事情。
但是,如果我這樣做會發生什麼:
class Foo : IDisposable { public void Dispose(){ CloseSomeHandle(); } }並且不要實現終結器或任何東西。框架會為我呼叫 Dispose 方法嗎?
是的,我意識到這聽起來很愚蠢,所有邏輯都暗示它不會,但我的腦後總是有兩件事讓我不確定。
- 幾年前有人告訴我,它實際上會這樣做,而且那個人在“了解他們的東西”方面有著非常可靠的記錄。
- 編譯器/框架會根據您實現的介面(例如:foreach、擴展方法、基於屬性的序列化等)執行其他“魔術”操作,因此這也可能是“魔術”是有道理的。
雖然我已經閱讀了很多關於它的東西,並且暗示了很多東西,但我從來沒有能夠找到一個明確的“是”或“否”的答案來回答這個問題。
.Net 垃圾收集器在垃圾收集上呼叫對象的 Object.Finalize 方法。預設情況下,它什麼都不做,如果你想釋放額外的資源,必須覆蓋它。
Dispose 不會自動呼叫,如果要釋放資源,則必須顯式呼叫,例如在“使用”或“嘗試最終”塊中
有關詳細資訊,請參閱<http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx>