我有一个返回Foo
对象的方法IDisposable
。通常,在调用此方法时,将使用返回值。但是,在这种情况下,我需要调用方法但不需要返回值。立即拨打Dispose
是正确的做法吗?如果是这样,我在下面做了哪些事情呢?
Foo().Dispose();
或
using(Foo())
{
}
或只是
Foo();
答案 0 :(得分:4)
如果一个对象实现了IDisposable,那么在完成该对象后应该调用Dispose方法。 Dispose旨在释放在GC(垃圾收集器)循环(或GC未涵盖的事物)之前不应保留的资源。当GC检测到对象不再使用时,它将调用对象终结器,但无法预测何时会发生这种情况。因此,创建了IDisposable接口,以便程序员可以显式地处理对象的资源(它不会删除对象,GC仍然会这样做。)
我想我更喜欢
Foo().Dispose();
但它确实无关紧要(前两者之间)。如果你只是使用“Foo();”那么你不尊重Dispose模式是不正确的。您可能想要尝试确定对象正在创建哪种资源,也许有一种方法可以获得所需的信息,而无需创建需要处理的对象。