天天看點

.NET中IDisposable接口的基本使用

首先來看MSDN中關于這個接口的說明:

2.此接口的主要用途是釋放非托管資源。當不再使用托管對象時,垃圾回收器會自動釋放配置設定給該對象的記憶體。但無法預測進行垃圾回收的時間。另外,垃圾回收器對視窗句柄或打開的檔案和流等非托管資源一無所知。将此接口的Dispose方法與垃圾回收器一起使用來顯式釋放非托管資源。當不再需要對象時,對象的使用者可以調用此方法。

一:基本應用

1.我們來定義一個實作了IDisposable接口的類,代碼如下:

3.1. SupressFinalize方法以防止垃圾回收器對不需要終止的對象調用 Object.Finalize()。 

3.2. 使用IDisposable.Dispose 方法,使用者可以在可将對象作為垃圾回收之前随時釋放資源。如果調用了 IDisposable.Dispose 方法,此方法會釋放對象的資源。這樣,就沒有必要進行終止。IDisposable.Dispose 應調用 GC.SuppressFinalize 以使垃圾回收器不調用對象的終結器。 

3.3.我們不希望Dispose(bool Diposing)方法被外部調用,是以他的通路級别為protected 。如果Diposing為true則釋放托管資源和非托管資源,如果 Diposing等于false則該方法已由運作庫從終結器内部調用,并且隻能釋放非托管資源。 

3.4.如果在對象被釋放後調用其他方法,則可能會引發 ObjectDisposedException。

三:執行個體解析

2.使用CLR垃圾收集器,您不必再擔心如何管理對托管堆配置設定的記憶體,不過您仍需清理其他類型的資源。托管類通過 

IDisposable 接口使其使用方可以在垃圾收集器終結對象前釋放可能很重要的資源。通過遵循 disposable 模式并且留 

意需注意的問題,類可以確定其所有資源得以正确清理,并且在直接通過 Dispose 調用或通過終結器線程運作清理代碼時 

不會發生任何問題。

本文轉自生魚片部落格園部落格,原文連結:http://www.cnblogs.com/carysun/archive/2008/06/15/Dispose.html,如需轉載請自行聯系原作者