处理样本 c#

Rey*_*eyn 3 c# idisposable

查看MSDN的示例代码

// Design pattern for a base class.
public class Base: IDisposable
{
    private bool disposed = false;

    //Implement IDisposable.
    public void Dispose()
    {
          Dispose(true);      <---- 1 Here
          GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
         if (!disposed)
         {
             if (disposing)
             {
                 // Free other state (managed objects).
             }
             // Free your own state (unmanaged objects).
             // Set large fields to null.
             disposed = true;
         }
    }

   // Use C# destructor syntax for finalization code.
   ~Base()
   {
       // Simply call Dispose(false).
       Dispose (false);
   }
}
Run Code Online (Sandbox Code Playgroud)

我似乎没有得到第一个箭头指向的代码行(<----- 1 Here)。

我对第一个箭头感到困惑,不知道处置属于谁。到 IDisposable 或基础的虚拟 Dispose?

任何对我有帮助的帮助都很棒,非常感谢!

Mar*_*ell 5

Dispose(true)/的目的Dispose(false)是让真正的代码 - the virtual void Dispose(bool)- 知道它是通过 dispose 还是 Finalize 调用。特定Dispose(bool)于类(虚方法);IDisposable只有一个无参数Dispose()方法。像这样:

  • Dispose(true)路线只会被调用 via IDisposable- 这通常意味着 viausing
  • Dispose(false)路由只会通过垃圾收集器调用

(请注意,一旦完成,该Dispose(true)路线将禁用最终确定步骤)

这个布尔标志很重要,因为在最终确定期间,您无法触及任何其他托管资源(因为顺序是不确定的) - 只能触及非托管资源。事实上,这个方法virtual意味着子类可以添加自己的清理代码。

但实际上,很少需要实现终结器。您不应该定期添加这么多样板。