我今天在写一些IDisposable
代码时想到了这个问题。
对于开发人员来说,直接调用Dispose()
是好的实践,或者如果对象的生命周期允许,可以使用using
结构。
我们需要担心的唯一情况是那些由于我们代码的机制而无法使用using
的情况。但是,我们应该在某个时候调用这些对象的Dispose()
。
考虑到C#编译器知道对象实现了IDisposable
,它理论上也可以知道Dispose()
从未在其上调用过(它已经是一个非常聪明的编译器!)。它可能不知道程序员应该何时这样做的语义,但它可以作为一个很好的提醒,即因为它从未被用于using
结构中,并且没有直接调用实现IDisposable
的任何对象的Dispose()
方法。
这是什么原因,还是有想要走这条路的想法吗?
List<T>
引用都没有被开发人员显式地释放。 - Moo-JuiceIDisposable
对象实例都应该被处理,仅一次;唯一不需要处理的是像StreamReader
这样设计不良的类,它们假设一旦它们接收到对象的引用,提供该引用的人将不再需要该对象。主要的混乱问题源于即使可能存在许多对一个对象的引用,只有最后一个使用该对象的用户应该Dispose
它。 - supercat