3

Dispose を明示的に呼び出していない呼び出し元を見つけるために、デバッグ プロセッサでファイナライザーを定義するのが正しいアプローチであるかどうか (すべてのリソースは管理されたリソースであるため、実際には必要ありません) かどうか疑問に思っています。その場合、ファイナライザーが呼び出され、Debug.Fail メッセージが発生します。

Public class Foo: IDisposable
{
      ...

    public void Dispose()
    {
      Dispose(true);

      #if DEBUG         
      GC.SuppressFinalization();
      #endif
    }

    protected virtual void Dispose(bool disposing_)
    {
      if (disposing_)
      {
         // Unsubscribe from any event handlers, etc.
      }
    }

    #if DEBUG
    ~ Foo()
    {
      Dispose(false);
      Debug.Fail("Dispose was not invoked by caller"); // <--
    }
    #endif
}
4

1 に答える 1