如何判断是否配置了IDisposable对象引用?

Nei*_*ski 82 .net c# dispose idisposable

是否有方法或其他轻量级方法来检查引用是否属于被处置对象?

PS - 这只是一种好奇心(睡得好,不在生产代码中).是的,我知道我可以ObjectDisposedException试图访问该对象的成员.

Dan*_*kas 45

否 - IDisposable模式的默认实现不支持它


Rya*_*ndy 40

System.Windows.Forms.Control有一个IsDisposed属性,Dispose()被调用后设置为true.在您自己的IDisposable对象中,您可以轻松创建类似的属性.

  • OP 正在查看他未创建的对象上是否已经存在类似的属性。这对于我们创建的对象来说是个好主意,但是 .NET 中的大多数一次性类都没有遵循这个约定。丹迪卡斯的回答是正确的。 (2认同)
  • @ krillgar,OP的问题中没有任何内容可以支持您的主张。 (2认同)

Sco*_*man 18

内置任何东西都不会允许这样做.您需要公开反映内部置位标志的IsDisposed布尔属性.

public class SimpleCleanup : IDisposable
{
    private bool disposed = false;

    public bool IsDisposed
    {
       get
       {
          return disposed;
       }
    }

    public SimpleCleanup()
    {
        this.handle = /*...*/;
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
               // free only managed resources here
            }

            // free unmanaged resources here
            disposed = true;
        }
    }

    public void Dispose()
    {
        Dispose(true);
    }
}
Run Code Online (Sandbox Code Playgroud)


jop*_*jop 9

如果它不是你的类并且它没有提供IsDisposed属性(或类似的东西 - 名称只是一个约定),那么你无法知道.

但是如果它是你的类并且你遵循规范的IDisposable实现,那么只需将_disposed或_isDisposed字段作为属性公开并检查它.