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

3

正如评论中所指出的,拥有可调试的终结器是完全有效的,msdn.microsoft.com/en-us/magazine/cc163324.aspx – Andreas

于 2013-09-18T16:51:02.647 回答