如何知道IDisposable是否被处置?

时间:2011-02-11 10:56:00

标签: .net idisposable

如何知道IDisposable对象是否被处置?


原因:
我有一个GraphicsPathIDisposable)的集合,我使用OnMouseMove

有时我会清除收集并处理对象,然后重新填充它。

我使用少量(2-10)点构建我的路径,但有时我看到集合中的路径有数百和数千个点,这是不可能的。我想当我到达这段代码时可能已经处理了路径... 相关question

2 个答案:

答案 0 :(得分:3)

一般情况下,无法知道是否在一次性物体上调用了Dispose。但是,某些类型(如WinForms Control类型)会公开IsDisposed属性或类似属性。

由于客户端代码应该首先确定性地控制一次性对象的“生命周期”(配置的对象通常通常很快就无法访问,因此不太可能想要处理持有对它的引用很长时间),需要这个功能并不常见。

以下代码很可能需要更改设计:

if(!myDisposable.IsDisposed)
   myDisposable.DoSomething(); 

当然,如果您确实需要此功能且类型不提供此功能,您可以自己手动实现它。例如,您可以将它包装在公开class DisposableWrapper<T> : IDisposable where T : Disposable属性IsDisposed中,并且希望您通过包装器的Dispose方法处置包装对象,相关的簿记。

答案 1 :(得分:0)

Disposed只是一种方法。如果不添加像wasDisposed这样的标记,就不可能知道。