[分享]另一种对 IDisposable 的实现
相比于剛發出來沒多久的關于 MVVM 的文章,對 IDisposable 接口的討論更是老生常談了。
詳細講解 IDisposable 的文章也有很多,不想深入了解的看了會頭暈,想深入了解的估計也早就了解過了。
所以本文不講那么多大道理,實用為主,一切從簡。
正文
實際上,不管和大家一起討論過多少次,不管用過多少次,每次再使用 IDisposable 的時候總還是會有點犯迷糊,會懷疑自己實現得到底對不對。
久而久之,對 IDisposable 的實現就產生了一個模板,緊接著模板便理所當然地成了一個抽象類:
public abstract class DisposableObject: IDisposable{protected DisposableObject(){IsDisposed = false;}public bool IsDisposed { get; private set; }protected abstract void Dispose(bool disposing);public void Dispose(){if (IsDisposed) return;Dispose(true);IsDisposed = true;GC.SuppressFinalize(this);}~DisposableObject(){Dispose(false);}}實現 IDisposable 的時候只要派生自這個抽象類再覆蓋?void Dispose(bool disposing) 這個方法就好了。
需要注意的地方則是:
1、只有當 disposing 的值為 true 時需要改變向外暴露的狀態信息,通常來說都是值類型的屬性,而當 disposing 為 false 的時候不需要這么做;
2、在 Dispose 方法中只需要釋放那些未被封裝成托管對象的資源,例如通過 IntPtr 操作的系統對象,而實現了 IDisposable 的對象則不需要在此處進行釋放,因為它們同樣也實現了 Finalizer。
轉載于:https://www.cnblogs.com/NanaLich/archive/2013/01/04/yet-another-implementation-of-idisposable.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的[分享]另一种对 IDisposable 的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2013年的财务预算
- 下一篇: openresty 环境搭建