处置标志在Dispose(bool)中到底意味着什么?

zio*_*law 2 c# design-patterns idisposable

如下面的示例实现,即https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose,有一个标志指示冗余调用.在示例中,它始终位于Dispose(bool disposing)方法的最后一行.这是否意味着它表明所有内容都已被处理或只是简单地保护方法执行一次运行?

private bool disposed = false; // To detect redundant calls

protected virtual void Dispose(bool disposing)
{
    if (!disposed)
    {
        if (disposing)
        {
            if (this.cache != null)
            {
                this.cache.Dispose();
            }
        }

        disposed = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

该实施仍然是正确的吗?

protected virtual void Dispose(bool disposing)
{
    if (!disposed)
    {
        disposed = true; 

        if (disposing)
        {
            if (this.cache != null)
            {
                this.cache.Dispose();
            }
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 8

有一个表示冗余呼叫的标志.在示例中,它始终位于Dispose(bool disposing)方法的最后一行.这是否意味着它表明所有内容都已被处理或只是简单地保护方法执行一次运行?

模式中有两个标志:disposingdisposed.

disposed开始为false,并在对象被处置后立即设置为true.目的disposed是使Dispose 幂等.那就是:Dispose两次打电话应该是合法的,第二次不应该做什么.

Dispose(bool)模式中受保护的方法有两个调用者:常规Dispose方法和终结器.模式是Dispose调用Dispose(true)和终结器调用,Dispose(false)以便方法的实现知道是否使用常规规则或终结器规则进行清理.