日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用IDisposable接口构建包含非托管资源对象

發(fā)布時間:2025/3/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用IDisposable接口构建包含非托管资源对象 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

托管資源與非托管資源

在.net中,對象使用的資源分為兩種:托管資源與非托管資源。托管資源由CLR進(jìn)行管理,不需要開發(fā)人員去人工進(jìn)行控制,.NET中托管資源主要指“對象在堆中的內(nèi)存”;非托管資源指對象使用到的一些托管內(nèi)存之外的內(nèi)資源(例如操作系統(tǒng)的資源),CLR不會管理這些資源,需要開發(fā)人員去控制。.NET對象使用到的非托管資源主要有I/O流、數(shù)據(jù)庫連接、Socket連接、窗口句柄等直接與操作系統(tǒng)操作的相關(guān)資源。

管理非托管資源

當(dāng)一個對象不再使用時,我們應(yīng)該將它使用的非托管資源釋放掉,歸還給操作系統(tǒng),不然等到CLR將它在隊中的內(nèi)存回收之后。這部分內(nèi)存就會變成不可達(dá)狀態(tài)。只能等到整個應(yīng)用程序運(yùn)行結(jié)束后才能歸還給系統(tǒng)。所以我們應(yīng)當(dāng)在該對象實例處于“可達(dá)”狀態(tài)時,既有對象引用指向它時釋放非托管資源。

利用IDisposable接口構(gòu)造含有非托管資源類型的對象

在.net類庫中有一個IDisposed的接口。幾乎每一個使用非托管資源的類型都應(yīng)該實現(xiàn)這個接口。那么如果我們看到實現(xiàn)此接口的類型,也應(yīng)該第一時間想到該類型中包含非托管資源。IDispose接口是管理對象非托管資源的一種原則。代碼如下:

interface IDisposable {void Dispose(); } class ABase:IDisposable {bool _disposed = false;public bool Disposed{get{return _disposed;}}public ABase(){}public void Dispose(){if(_disposed){Dispose(true);GC.SuppressFinalize(this);_disposed = true;}}protected virtual void Dispose(bool disposing){if(disposing){//release member's unmanaged resource}// release ABase's unmanaged resource}~ABase{Dispose(false);} } class A : ABase {public A(){}protected override void Dispose(bool disposing){if(disposing){// release member's unmanaged resource}// release A's unmanaged resource// release base class's unmanaged resourcebase.Dispose(disposing);}} class B:A {public B(){}public void Dosomething(){if(Disposed)// if released, throw exception{throw new ObjectDisposedException(...);}// do something here}protected override void Dispose(bool disposing){if(disposing){// release member's unmanaged resource}// release B's Unmanaged resourcebase.Dispose(disposing);} }

轉(zhuǎn)載于:https://www.cnblogs.com/MaFeng0213/p/9948746.html

總結(jié)

以上是生活随笔為你收集整理的利用IDisposable接口构建包含非托管资源对象的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。