在构造函数中使用必须为Disposed的对象

时间:2009-11-21 19:35:35

标签: c#

在我写的一个类中,我正在使用一个对象在我正在编写的自定义类中设置它的一些属性。

这是在构造函数中完成的,但该类有一个Dispose()方法。

我从未在具有Dispose()方法/实现IDisposable的构造函数中实际使用过对象。我应该在using(...)语句中包装它还是应该实现析构函数/终结符?

我的想象力让我问这个:这个类是第三方封闭源API的一部分。我怎样才能找出需要处理的内容?

由于

3 个答案:

答案 0 :(得分:5)

如果对对象的引用是构造函数的本地引用,则只需将其包装在using语句中。

如果你对这个对象的引用是一个类成员,那么你的类也应该实现IDisposable,它的Dispose()方法在对象上调用Dispose()。

答案 1 :(得分:1)

只是为了回答问题的其他部分而添加:

  • 您通常只应实现使用非托管资源的终结器,如果程序异常终止,可能需要清理这些资源。 GC会在某些时候对任何托管对象进行整理。不要依赖终结器来处理任何托管对象,因为你无法预测它何时会被执行。
  • 您无需关心需要处理的内容。你应该相信,当一个类实现IDisposable时,它会通过该模式处理所有事情。如果编码错误,那么你可能会遇到问题,但在这种情况下我会很乐观。

我总是选择在可能的情况下将IDisposable包装在Using块中,因为我认为它比尝试显式调用Dispose()方法更简洁。

答案 2 :(得分:0)

如果你不需要构造函数之外的对象,为什么不使用using语句? 如果有一个特殊的“破坏”代码 - 使用是不够的,你需要从某个地方调用它的处理代码......