IDispose模式在C++中用的很多,用來清理資源,而在C#里,資源分為托管和非托管兩種,托管資源是由C#的CLR幫助我們清理的,它是通過調(diào)用對象的析構(gòu)函數(shù)完成的對象釋放工作,而對于非托管系統(tǒng)來說,則需要我們自己來釋放,例如數(shù)據(jù)庫連接對象,這就需要我們手動去調(diào)用它的Dispose()方法來實現(xiàn)對象它的釋放,事實上,Dispose()內(nèi)容到底做了什么事,我們并不清楚,當然這就是面向?qū)ο螅幌M汴P(guān)系實現(xiàn)的細節(jié),呵!
對于我們開發(fā)人員來說,在了解它怎么用之后,總會對它如何實現(xiàn)的產(chǎn)生興趣,下面,我將把C#里實現(xiàn)IDispose模式的代碼展現(xiàn)出來,大家一起來學習一下,事實上,它的使用場合也很多的,當我們手動對網(wǎng)站,數(shù)據(jù)庫作封裝時,都會用的到,下面看一下代碼:
protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)//_isDisposed為false表示沒有進行手動dispose
{
if (disposing)
{
//清理托管資源
}
//清理非托管資源
}
_isDisposed = true;
}
private bool _isDisposed;
~IDisplosePattern()
{
this.Dispose(false);//釋放非托管資源,托管資源由終極器自己完成了
}
}
通過上面的代碼,我們知道了,對于托管系統(tǒng)(C#的CLR為我們管理的),直接通過~IDisplosePattern()方法進行釋放,而~IDisplosePattern()這個方法何時被調(diào)用,我們是不知道的,因為它是由CLR幫助我們調(diào)用的,而我們手動進行dispose方法時,它會調(diào)用dispose(true)這個重載方法,它會幫助我們清理托管和非托管資源。
新聞熱點
疑難解答
圖片精選