.Net类应用idisposeable[英] .Net Class to apply idisposeable

本文是小编为大家收集整理的关于.Net类应用idisposeable的处理方法,想解了.Net类应用idisposeable的问题怎么解决?.Net类应用idisposeable问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

大家好,

我怀疑在课堂上使用 IDisposeable.我尝试将以下代码用于 dispose 方法.

公共 重载  Dispose() 实现 IDisposable.Dispose.Dispose(True)GC.SuppressFinalize()结束 受保护 可覆盖 重载 Sub Dispose(ByVal Disposing As 布尔)如果 不是 _bDisposed 那么If 处理 那么'管理取消管理资源结束 如果If _sqlCon IsNot Nothing 那么 _bDisposed = 结束 如果结束 受保护 覆盖 Sub Finalize()处置(False)MyBase.Finalize()结束 

我将在 Dispose(Boolean) 中清理相关资源.

I) 当我们实现 IDisposable.Dispose 时,如果调用了 dispose 方法,则意味着当前实例将被释放?

II)如果我做suppressfinalize,这会影响dispose类本身吗?

III)即使我在 Dispose 方法中抑制了finalize,但如果有任何其他类指向这个类,那么它仍然会调用 Finalize 方法.为什么?

IV)我们知道finalize会释放资源并执行其他清理操作,但是为什么我们仍然需要进行suppressfinalize呢?

推荐答案

AI)如果你只是实现IDisposable, 没发生什么事.需要这个方法来保证一些基于通用接口的动作.它的主要用途是使用 using 语句:
http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.110%29.aspx[^].

AII) 没有处理类这样的事情.它应该是什么意思?你需要更好地理解什么是类型,什么是对象.另外,从上一条应该明白,disposal与finalization无关.

AIII) 可能 Dispose 永远不会被调用,所以 GC.SuppressFinalize(Me) 也永远不会被调用.在您的代码示例中,没有迹象表明您曾经调用过它.在这一行打断点,看看发生了什么.

AIV)这只是这里解释的机制:http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx[^].我认为使用它根本不是一个好的编程习惯.我推测这个机制只是为了托管垃圾收集和终结系统的完整性而包含在内.甚至很少需要析构函数.

—SA

本文地址:https://www.itbaoku.cn/post/1355996.html