C++基础才是任重而道远~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)这个重载方法,它会赞助我们清理托管和非托管资源,如图:

C++ 1

返回目录