是否有方法或其他轻量级方法来检查引用是否属于被处置对象?
PS - 这只是一种好奇心(睡得好,不在生产代码中).是的,我知道我可以ObjectDisposedException
试图访问该对象的成员.
否 - IDisposable模式的默认实现不支持它
System.Windows.Forms.Control
有一个IsDisposed
属性,在Dispose()
被调用后设置为true.在您自己的IDisposable对象中,您可以轻松创建类似的属性.
内置任何东西都不会允许这样做.您需要公开反映内部置位标志的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); } }
如果它不是你的类并且它没有提供IsDisposed属性(或类似的东西 - 名称只是一个约定),那么你无法知道.
但是如果它是你的类并且你遵循规范的IDisposable实现,那么只需将_disposed或_isDisposed字段作为属性公开并检查它.