互联网I一次性图案 http://msdn.microsoft.com/en-us/library/system.idisposable.aspx implies如果您编写一个终结器并实现 IDisposable,则您的终结器需要显式调用 Dispose。
这是合乎逻辑的,也是我在极少数需要终结器的情况下所做的事情。
但是,如果我这样做会发生什么:
class Foo : IDisposable
{
public void Dispose(){ CloseSomeHandle(); }
}
并且不要实现终结器或任何东西。框架会为我调用 Dispose 方法吗?
是的,我意识到这听起来很愚蠢,所有的逻辑都暗示它不会,但我脑子里总是有两件事让我不确定。
几年前有人曾经告诉我,它实际上会做到这一点,而且那个人在“了解他们的东西”方面有着非常可靠的记录。
编译器/框架会根据您实现的接口执行其他“神奇”的事情(例如:foreach、扩展方法、基于属性的序列化等),因此这也可能是“神奇的”是有道理的。
虽然我读过很多关于它的东西,并且有很多暗示的东西,但我从来没有找到一个确定的这个问题的答案是“是”或“否”。
.Net 垃圾收集器在垃圾收集时调用对象的 Object.Finalize 方法。经过default这确实nothing如果您想释放额外的资源,则必须覆盖它。
Dispose 不会自动调用,必须调用明确性如果要释放资源,例如在“using”或“tryfinally”块内,则调用
see http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx http://msdn.microsoft.com/en-us/library/system.object.finalize.aspx了解更多信息
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)