垃圾收集器是否会为我调用IDisposable.Dispose?
.NET IDisposable Pattern 意味着如果您编写终结器并实现IDisposable,则终结器需要显式调用Dispose。这是合乎逻辑的,而且在极少数情况下我总是会做终结器的保证。
但是,如果我这样做会发生什么:
class Foo : IDisposable{ public void Dispose(){ CloseSomeHandle(); }}
并且不要实现终结器或任何东西。框架会为我调用Dispose方法吗?
是的,我意识到这听起来很愚蠢,而且所有的逻辑都暗示它不会,但我总是有两件事让我不确定。
几年前有人曾告诉我,事实上它会这样做,而且那个人有“非常了解他们的东西”的良好记录。
编译器/框架根据您实现的接口(例如:foreach,扩展方法,基于属性的序列化等)执行其他“神奇”操作,因此这也可能是“魔术”。
虽然我已经阅读了很多关于它的内容,并且有很多暗示的内容,但我从来没有能够找到这个问题的肯定是或否答案。
慕仙森