国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

基礎才是重中之重~C#中標準的IDispose模式

2019-11-17 03:22:36
字體:
來源:轉載
供稿:網友

基礎才是重中之重~C#中標準的IDispose模式

回到目錄

IDispose模式在C++中用的很多,用來清理資源,而在C#里,資源分為托管和非托管兩種,托管資源是由C#的CLR幫助我們清理的,它是通過調用對象的析構函數完成的對象釋放工作,而對于非托管系統來說,則需要我們自己來釋放,例如數據庫連接對象,這就需要我們手動去調用它的Dispose()方法來實現對象它的釋放,事實上,Dispose()內容到底做了什么事,我們并不清楚,當然這就是面向對象,它不希望你關系實現的細節,呵!

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

 /// <summary>    /// 實現IDisposable,對非托管系統進行資源回收    /// </summary>    public class IDisplosePattern : IDisposable    {        public void Dispose()        {            this.Dispose(true);////釋放托管資源            GC.SupPRessFinalize(this);//請求系統不要調用指定對象的終結器. //該方法在對象頭中設置一個位,系統在調用終結器時將檢查這個位        }        protected virtual void Dispose(bool disposing)        {            if (!_isDisposed)//_isDisposed為false表示沒有進行手動dispose            {                if (disposing)                {                    //清理托管資源                }                //清理非托管資源            }            _isDisposed = true;        }        private bool _isDisposed;        ~IDisplosePattern()        {            this.Dispose(false);//釋放非托管資源,托管資源由終極器自己完成了        }    }

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

回到目錄


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐河县| 岚皋县| 洞头县| 新乐市| 靖宇县| 酒泉市| 平和县| 巢湖市| 耿马| 乐都县| 昌吉市| 宜城市| 汝州市| 新密市| 洮南市| 海盐县| 西充县| 泰顺县| 太康县| 桑日县| 长岛县| 庐江县| 洪泽县| 尚志市| 新田县| 丹棱县| 巨野县| 开封市| 武强县| 塔城市| 德州市| 韶山市| 秀山| 马龙县| 潢川县| 呈贡县| 乳源| 绥德县| 子长县| 泾阳县| 云阳县|