c# – IDisposable GC.SuppressFinalize(this)位置

我的代码使用认的Idisposable实现模板(模式).

片段:

public void dispose()
{
    dispose(true);

    GC.SuppressFinalize(this);
}

protected virtual void dispose(bool isdisposing)
{
    if (!this.disposed)
    {
        if (isdisposing)
        {
            //cleanup managed resources
        }

        //cleanup unmanaged resources

        this.disposed = true;
    }
}

我的问题:为什么在dispose public方法调用“GC.SuppressFinalize(this)”?在处理托管资源后,我将在保护方法的“if(isdisposing)”部分放置“GC.SuppressFinalize(this)”.

喜欢这个:

protected virtual void dispose(bool isdisposing)
{
    if (!this.disposed)
    {
       if (isdisposing)
       {
           //cleanup managed resources

           GC.SuppressFinalize(this);
       }

       //cleanup unmanaged resources

       this.disposed = true;
    }
}

解决方法

我想这是一个明确的模板设计模式.

您的抽象类被设计为处理所需的所有重要/必需的任务(这里,GC.SuppressFinalize(this)),并允许派生类仅覆盖代码的一部分.

这里有两种情况:
代码片段1,SuppressFinalize,处理
Snippet 2,in dispose(true)

这里,Snippet 1,确保始终执行GC.SuppressFinalize.而代码段2,在派生类的支持下执行GC.SuppressFinalize.

因此,通过放置GC.SuppressFinalize,在dispose方法中,您作为类的设计者始终确保无论派生类写入的代码如何,GC.SuppressFinalize都将被执行.

这只是在dispose中编写SuppressFinalize而不是dispose(true)的好处.

相关文章

原文地址:http://msdn.microsoft.com/en-us/magazine/cc163...
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采...
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下...
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Mic...
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么