加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:50:52 所属栏目:百科 来源:网络整理
导读:我的代码使用默认的IDisposable实现模板(模式). 片段: public void Dispose(){ Dispose(true); GC.SuppressFinalize(this);}protected virtual void Dispose(bool isDisposing){ if (!this.disposed) { if (isDisposing) { //cleanup managed resources } /
我的代码使用默认的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)的好处.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读