弱引用和一次性对象

Ste*_*don 5 c# garbage-collection weak-references

在C#中,可以创建对象的弱引用,如下所述:

WeakReference类

在.net中,一些类还实现了IDisposable接口.调用此接口的Dispose方法以手动处理当前保留的任何托管或非托管资源.一个例子可能是Bitmap对象或类.

如果我将一个实现IDisposable的对象分配给弱引用,如果弱引用收集对象,是否会调用Dispose?

Ste*_*ary 6

GC不会调用Dispose.必须通过用户代码调用Dispose.


Tom*_*cek 5

一般来说,答案确实是否定的.

但是,正确实现的类IDisposable使用IDisposable模式实现(希望所有.NET类都这样做).还将实现在对象被垃圾收集时调用的终结器,并且在终结器内部调用它Dispose.因此,对于所有正确的实现IDisposable,Dispose将调用该方法.

(注意:费尔南多的反例没有IDisposable正确实施)

  • 实际上,"标准"终结器只调用`Dispose(bool)`; `Dispose()`没有被调用,因此任何依赖于托管代码的清理(例如,刷新底层文件流)都无法完成. (2认同)