那个。NET 一次性模式 暗示,如果编写终结器并实现 IDisposable,则终结器需要显式调用 Dispose。 这是合乎逻辑的,在极少数需要终结器的情况下,我总是这样做。
然而,如果我这样做会发生什么:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
并且不要实现终结器或者其他东西。框架会为我调用 Dispose 方法吗?
是的,我知道这听起来很愚蠢,而且所有的逻辑都暗示这不会发生,但是我总是有两件事情在我的脑后让我不确定。
几年前有人曾经告诉我,它实际上会做到这一点,而且那个人有一个非常坚实的记录“知道他们的东西。”
编译器/框架根据您实现的接口(例如: foreach、扩展方法、基于属性的序列化等)做其他“神奇”的事情,所以这也可能是“神奇”的。
虽然我读了很多关于它的东西,有很多东西暗示,我从来没有能够找到一个 很明确是或否回答这个问题。