[分享]另一种对 IDisposable 的实现
相比于剛發(fā)出來沒多久的關(guān)于 MVVM 的文章,對(duì) IDisposable 接口的討論更是老生常談了。
詳細(xì)講解 IDisposable 的文章也有很多,不想深入了解的看了會(huì)頭暈,想深入了解的估計(jì)也早就了解過了。
所以本文不講那么多大道理,實(shí)用為主,一切從簡(jiǎn)。
正文
實(shí)際上,不管和大家一起討論過多少次,不管用過多少次,每次再使用 IDisposable 的時(shí)候總還是會(huì)有點(diǎn)犯迷糊,會(huì)懷疑自己實(shí)現(xiàn)得到底對(duì)不對(duì)。
久而久之,對(duì) IDisposable 的實(shí)現(xiàn)就產(chǎn)生了一個(gè)模板,緊接著模板便理所當(dāng)然地成了一個(gè)抽象類:
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);}}實(shí)現(xiàn) IDisposable 的時(shí)候只要派生自這個(gè)抽象類再覆蓋?void Dispose(bool disposing) 這個(gè)方法就好了。
需要注意的地方則是:
1、只有當(dāng) disposing 的值為 true 時(shí)需要改變向外暴露的狀態(tài)信息,通常來說都是值類型的屬性,而當(dāng) disposing 為 false 的時(shí)候不需要這么做;
2、在 Dispose 方法中只需要釋放那些未被封裝成托管對(duì)象的資源,例如通過 IntPtr 操作的系統(tǒng)對(duì)象,而實(shí)現(xiàn)了 IDisposable 的對(duì)象則不需要在此處進(jìn)行釋放,因?yàn)樗鼈兺瑯右矊?shí)現(xiàn)了 Finalizer。
轉(zhuǎn)載于:https://www.cnblogs.com/NanaLich/archive/2013/01/04/yet-another-implementation-of-idisposable.html
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的[分享]另一种对 IDisposable 的实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2013年的财务预算
- 下一篇: openresty 环境搭建