c#標(biāo)準(zhǔn)idispose模式使用示例
IDispose模式在C++中用的很多,用來(lái)清理資源,而在C#里,資源分為托管和非托管兩種,托管資源是由C#的CLR幫助我們清理的,它是通過(guò)調(diào)用對(duì)象的析構(gòu)函數(shù)完成的對(duì)象釋放工作,而對(duì)于非托管系統(tǒng)來(lái)說(shuō),則需要我們自己來(lái)釋放,例如數(shù)據(jù)庫(kù)連接對(duì)象,這就需要我們手動(dòng)去調(diào)用它的Dispose()方法來(lái)實(shí)現(xiàn)對(duì)象它的釋放,事實(shí)上,Dispose()內(nèi)容到底做了什么事,我們并不清楚,當(dāng)然這就是面向?qū)ο螅幌M汴P(guān)系實(shí)現(xiàn)的細(xì)節(jié),呵!
對(duì)于我們開發(fā)人員來(lái)說(shuō),在了解它怎么用之后,總會(huì)對(duì)它如何實(shí)現(xiàn)的產(chǎn)生興趣,下面,我將把C#里實(shí)現(xiàn)IDispose模式的代碼展現(xiàn)出來(lái),大家一起來(lái)學(xué)習(xí)一下,事實(shí)上,它的使用場(chǎng)合也很多的,當(dāng)我們手動(dòng)對(duì)網(wǎng)站,數(shù)據(jù)庫(kù)作封裝時(shí),都會(huì)用的到,下面看一下代碼:
/// <summary>
/// 實(shí)現(xiàn)IDisposable,對(duì)非托管系統(tǒng)進(jìn)行資源回收
/// </summary>
public class IDisplosePattern : IDisposable
{
public void Dispose()
{
this.Dispose(true);////釋放托管資源
GC.SuppressFinalize(this);//請(qǐng)求系統(tǒng)不要調(diào)用指定對(duì)象的終結(jié)器. //該方法在對(duì)象頭中設(shè)置一個(gè)位,系統(tǒng)在調(diào)用終結(jié)器時(shí)將檢查這個(gè)位
}
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)//_isDisposed為false表示沒有進(jìn)行手動(dòng)dispose
{
if (disposing)
{
//清理托管資源
}
//清理非托管資源
}
_isDisposed = true;
}
private bool _isDisposed;
~IDisplosePattern()
{
this.Dispose(false);//釋放非托管資源,托管資源由終極器自己完成了
}
}
通過(guò)上面的代碼,我們知道了,對(duì)于托管系統(tǒng)(C#的CLR為我們管理的),直接通過(guò)~IDisplosePattern()方法進(jìn)行釋放,而~IDisplosePattern()這個(gè)方法何時(shí)被調(diào)用,我們是不知道的,因?yàn)樗怯蒀LR幫助我們調(diào)用的,而我們手動(dòng)進(jìn)行dispose方法時(shí),它會(huì)調(diào)用dispose(true)這個(gè)重載方法,它會(huì)幫助我們清理托管和非托管資源。
相關(guān)文章
在winform中實(shí)現(xiàn)雙向數(shù)據(jù)綁定的方法
雙向數(shù)據(jù)綁定是一種允許我們創(chuàng)建持久連接的技術(shù),使模型數(shù)據(jù)和用戶界面(UI)之間的交互能夠自動(dòng)同步,今天我想通過(guò)winform中DataGridView控件為例,介紹在winform中如何實(shí)現(xiàn)雙向數(shù)據(jù)綁定,需要的朋友可以參考下2024-03-03
C#驗(yàn)證身份證號(hào)碼正確性的實(shí)例代碼(收藏)
這篇文章主要介紹了C#驗(yàn)證身份證號(hào)碼正確性的實(shí)例代碼,包括18位號(hào)碼和15位號(hào)碼的校驗(yàn),需要的朋友可以參考下2017-07-07
C#使用WMI獲取硬盤參數(shù)的實(shí)現(xiàn)方法
因?yàn)樾枨笮枰婕矮@取硬盤的SN參數(shù),但是又不想要獲取到U盤或移動(dòng)硬盤設(shè)備的SN,所以就淺淺的研究了一下,本文給大家介紹了C#使用WMI獲取硬盤參數(shù)的實(shí)現(xiàn)方法,需要的朋友可以參考下2024-06-06
Unity3D基于UGUI實(shí)現(xiàn)虛擬搖桿
這篇文章主要為大家詳細(xì)介紹了Unity3D基于UGUI實(shí)現(xiàn)虛擬搖桿,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
C#給picturebox控件加圖片選中狀態(tài)的2個(gè)方法
C#給picturebox控件加圖片選中狀態(tài)的2個(gè)方法,需要的朋友可以參考一下2013-03-03
如何利用現(xiàn)代化C#語(yǔ)法簡(jiǎn)化代碼
這篇文章主要給大家介紹了關(guān)于如何利用現(xiàn)代化C#語(yǔ)法簡(jiǎn)化代碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
C#中如何自定義配置上周和本周起始日來(lái)查詢業(yè)務(wù)數(shù)據(jù)(思路詳解)
在C#中并沒有封裝的方法根據(jù)我們需要來(lái)直接獲取上一周某天到某天、本周某天到某天,所以需要我們自己封裝方法來(lái)實(shí)現(xiàn)(我們也可以按照這個(gè)思路使用其他語(yǔ)言來(lái)實(shí)現(xiàn)),感興趣的朋友跟隨小編一起看看吧2023-09-09
.NET/C#實(shí)現(xiàn)識(shí)別用戶訪問設(shè)備的方法
這篇文章主要介紹了.NET/C#實(shí)現(xiàn)識(shí)別用戶訪問設(shè)備的方法,結(jié)合實(shí)例形式分析了C#識(shí)別用戶訪問設(shè)備的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02

