如何知道IDisposable对象是否被处置?
原因:
我有一个GraphicsPath
(IDisposable
)的集合,我使用OnMouseMove
。
有时我会清除收集并处理对象,然后重新填充它。
我使用少量(2-10)点构建我的路径,但有时我看到集合中的路径有数百和数千个点,这是不可能的。我想当我到达这段代码时可能已经处理了路径... 相关question
答案 0 :(得分:3)
一般情况下,无法知道是否在一次性物体上调用了Dispose
。但是,某些类型(如WinForms Control
类型)会公开IsDisposed
属性或类似属性。
由于客户端代码应该首先确定性地控制一次性对象的“生命周期”(配置的对象通常通常很快就无法访问,因此不太可能想要处理还持有对它的引用很长时间),需要这个功能并不常见。
以下代码很可能需要更改设计:
if(!myDisposable.IsDisposed)
myDisposable.DoSomething();
当然,如果您确实需要此功能且类型不提供此功能,您可以自己手动实现它。例如,您可以将它包装在公开class DisposableWrapper<T> : IDisposable where T : Disposable
属性的IsDisposed
中,并且希望您通过包装器的Dispose
方法处置包装对象,相关的簿记。
答案 1 :(得分:0)
Disposed只是一种方法。如果不添加像wasDisposed
这样的标记,就不可能知道。