什么是终结者?

ope*_*lar 8 .net c# vb.net finalizer

我已经在.NET中编程了四年(主要是C#)并且我广泛使用IDiposable,但我还没有找到终结者的需求.什么是终结者?

Mar*_*ell 11

终结器是确保正确清理某些内容的最后一次尝试,并且通常保留用于包装非托管资源的对象,例如不会被垃圾收集的非托管句柄等.

确实很难写出终结者.幸运的是(并且不像IDisposable),终结器不需要传播; 所以,如果你有ClassA一个终结,和ClassB它包装ClassA,则ClassB不需要终结-但很可能都ClassAClassB将实施IDisposable.

对于托管代码,IDisposable通常就足够了.即使您没有正确清理,最终也会收集托管对象(假设它们已被释放).