首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道是否处置了IDisposable?

如何知道是否处置了IDisposable?
EN

Stack Overflow用户
提问于 2011-02-11 10:56:00
回答 2查看 746关注 0票数 2

如何知道是否已释放IDisposable对象?

原因:

我有一个GraphicsPath(IDisposable)集合,我使用OnMouseMove

有时,我会清除集合并释放对象,然后再重新填充它。

我用少量的点(2-10点)来构建路径,但有时我会看到集合中的路径有成百上千个点,这是不可能的。我想当我到达这个密码时,路径可能已经被处理好了.相关

EN

回答 2

Stack Overflow用户

发布于 2011-02-11 10:57:42

通常,无法知道在一次性对象上是否调用了Dispose。但是,某些类型(如WinForms Control类型)确实公开了IsDisposed属性或类似的属性。

由于客户端代码一开始就需要决定性地控制一次性对象的“生存期”(通常情况下,已释放的对象应该很快就无法到达,因此人们不太可能想要释放某些东西,但却长期保存对它的引用),因此不需要这种功能。

下面这样的代码很可能需要更改设计:

代码语言:javascript
复制
if(!myDisposable.IsDisposed)
   myDisposable.DoSomething(); 

当然,如果您确实需要这个特性,而且类型不提供它,您可以自己手动实现它。例如,您可以将其包装在一个公开了一个class DisposableWrapper<T> : IDisposable where T : Disposable属性的IsDisposed中,并希望您通过包装器的Dispose方法来释放包装对象,该方法负责相关的簿记工作。

票数 3
EN

Stack Overflow用户

发布于 2011-02-11 10:57:37

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4968184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档