中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

基礎才(cai)是重(zhong)中之重(zhong)~C#中標準的(de)IDispose模式

回到目錄

IDispose模式在C++中用(yong)的(de)(de)(de)很多(duo),用(yong)來(lai)清理(li)資(zi)源,而在C#里(li),資(zi)源分為托(tuo)管和非托(tuo)管兩種,托(tuo)管資(zi)源是(shi)由C#的(de)(de)(de)CLR幫助(zhu)我(wo)(wo)們(men)清理(li)的(de)(de)(de),它(ta)是(shi)通過(guo)調(diao)用(yong)對(dui)象(xiang)的(de)(de)(de)析構(gou)函(han)數完成的(de)(de)(de)對(dui)象(xiang)釋(shi)放(fang)工(gong)作,而對(dui)于非托(tuo)管系(xi)統(tong)來(lai)說(shuo),則(ze)需要(yao)我(wo)(wo)們(men)自(zi)己來(lai)釋(shi)放(fang),例如數據庫連接對(dui)象(xiang),這就(jiu)需要(yao)我(wo)(wo)們(men)手(shou)動去調(diao)用(yong)它(ta)的(de)(de)(de)Dispose()方(fang)法來(lai)實(shi)現(xian)對(dui)象(xiang)它(ta)的(de)(de)(de)釋(shi)放(fang),事實(shi)上,Dispose()內容(rong)到底做(zuo)了(le)什么事,我(wo)(wo)們(men)并不清楚,當然這就(jiu)是(shi)面向對(dui)象(xiang),它(ta)不希望(wang)你關(guan)系(xi)實(shi)現(xian)的(de)(de)(de)細節,呵!

對于我們(men)開發人員來(lai)(lai)說,在了解它(ta)怎么用(yong)(yong)之后,總會對它(ta)如(ru)何實現(xian)的產生(sheng)興(xing)趣,下面(mian),我將把C#里實現(xian)IDispose模式的代碼展現(xian)出來(lai)(lai),大家一起來(lai)(lai)學習一下,事實上,它(ta)的使用(yong)(yong)場合也很多(duo)的,當我們(men)手動對網(wang)站,數據庫作封裝(zhuang)時,都會用(yong)(yong)的到,下面(mian)看一下代碼:

 /// <summary>
    /// 實現(xian)IDisposable,對非托(tuo)管系統進行(xing)資(zi)源回(hui)收
    /// </summary>
    public class IDisplosePattern : IDisposable
    {
        public void Dispose()
        {
            this.Dispose(true);////釋(shi)放托(tuo)管資源
            GC.SuppressFinalize(this);//請求(qiu)系統不要調用(yong)指(zhi)定(ding)對象的終結器(qi). //該方(fang)法在對(dui)象頭中(zhong)設(she)置一個(ge)位(wei),系統在調用(yong)終(zhong)結(jie)器時將檢(jian)查這個(ge)位(wei)
        }

        protected virtual void Dispose(bool disposing)
        {
            if (!_isDisposed)//_isDisposed為false表示沒有進行手(shou)動dispose
            {
                if (disposing)
                {
                    //清理托管資源
                }
                //清(qing)理非托管(guan)資(zi)源
            }
            _isDisposed = true;
        }

        private bool _isDisposed;

        ~IDisplosePattern()
        {
            this.Dispose(false);//釋放(fang)非(fei)托管(guan)資源,托管(guan)資源由終(zhong)極器自己(ji)完(wan)成了
        }
    }

通過上面的代碼,我們知道了,對于托管系統(C#的CLR為我們管理的),直接通過~IDisplosePattern()方法進行釋放,而~IDisplosePattern()這(zhe)個方(fang)法(fa)(fa)何時被調用(yong),我(wo)們(men)是(shi)不(bu)知道的,因為它(ta)是(shi)由CLR幫(bang)(bang)助(zhu)我(wo)們(men)調用(yong)的,而我(wo)們(men)手動進行dispose方(fang)法(fa)(fa)時,它(ta)會調用(yong)dispose(true)這(zhe)個重載方(fang)法(fa)(fa),它(ta)會幫(bang)(bang)助(zhu)我(wo)們(men)清理托(tuo)(tuo)管和非托(tuo)(tuo)管資(zi)源,如圖:

回到目錄

 

posted @ 2014-01-28 10:44  張占嶺  閱讀(4831)  評論(1)    收藏  舉報