gpt4 book ai didi

.net - 垃圾收集器会为我调用 IDisposable.Dispose 吗?

转载 作者:行者123 更新时间:2023-12-03 04:31:17 24 4
gpt4 key购买 nike

.NET IDisposable Pattern 意味着如果您编写终结器并实现 IDisposable,则终结器需要显式调用 Dispose。这是合乎逻辑的,并且在极少数需要终结器的情况下我总是这样做。

但是,如果我这样做会发生什么:

class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}

并且不要实现终结器或任何东西。框架会为我调用 Dispose 方法吗?

是的,我意识到这听起来很愚蠢,所有的逻辑都暗示它不会,但我脑子里总是有两件事让我不确定。

  1. 几年前有人曾经告诉我,它实际上会做到这一点,并且那个人在“了解他们的东西”方面有着非常可靠的记录。

  2. 编译器/框架会根据您实现的接口(interface)执行其他“神奇”操作(例如:foreach、扩展方法、基于属性的序列化等),因此这也可能是“神奇”的。

虽然我读过很多相关内容,并且暗示了很多内容,但我始终无法找到这个问题的明确是或否的答案。

最佳答案

.Net 垃圾收集器在垃圾收集时调用对象的 Object.Finalize 方法。默认情况下,这什么都不做,如果您想释放额外的资源,则必须覆盖它。

Dispose 不会自动调用,如果要释放资源,例如在“using”或“try finally” block 内,则必须显式调用

参见http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx了解更多信息

关于.net - 垃圾收集器会为我调用 IDisposable.Dispose 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com