如果您拥有对拥有非托管句柄的对象的托管引用,那么它可能实现了IDisposable。如果您对该实例拥有强大(和唯一)所有权 ,则应实现IDisposable,以便您可以正确地投影处理模式 。在这种情况下实施 a终结器是没有意义的,因为最终化发生的时间太晚,你无法尝试清理这些实例。 OTOH,如果您有通过P / Invoke获得的原始非托管句柄或 其他方法,您应该在Dispose的代码路径中清理该句柄并且 你的终结者。在你的Dispose方法中,你应该取消定型。 - Mickey Williams 作者,Visual C#.NET Core Ref, MS Press www.neudesic.com www.servergeek.com 我在MSDN中找到了这个语句。 因为Dispose方法必须明确调用,实现 IDisposable的对象还必须实现一个终结器来处理释放资源时 不调用Dispose。 我认为终结器是一个安全设备,当你没有显式调用Dispose时。 当我说隐含地调用Dispose()时,我的意思是终结器 调用Dispose()。 我错过了什么吗?I found this statement in MSDN.Because the Dispose method must be called explicitly, objects that implementIDisposable must also implement a finalizer to handle freeing resources whenDispose is not called.And I think that finalizer is a safety device for a case when you don''texplicit call Dispose.When I said that Dispose() is implicitly called, I meant that the finalizercalls Dispose().Am I missing something? 句柄的对象的托管引用,它可能实现了IDisposable 。如果你对该实例拥有强大的(和唯一的)所有权,你应该实现IDisposable,这样你就可以正确地投射Dispose模式。在这种情况下,在中实施终结器是没有意义的,因为最终化发生得太晚,你无法尝试清理这些实例。 OTOH,如果你有一个原始的您通过P / Invoke 或其他方式获得的非托管句柄,您应该在Dispose和终结器的代码路径中清理该句柄。在您的Dispose方法中,您应该取消最终确定。 - Mickey Williams 作者,Visual C#.NET Core Ref,MS Press www.neudesic.com www.servergeek.com 谢谢。 SamThanks.Sam 这篇关于关于Dispose的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!
08-14 16:50