是否必须在 Dispose() 方法中删除事件处理程序,或者类对象 = 什么都不够
Is it compulsory to RemoveEventHandler in Dispose() Mothod, Or ClassObject = Nothing is sufficient
我已经声明了几个 WithEvent 处理程序,例如
Private WithEvents mErrorList As ErrorList
Private WithEvents mControlManager As ControlManager
我使用此处理程序订阅 class 中的事件,例如
Private Sub mControlManager_PageLoaded(sender As Object, e As DataEntry.PageLoadEventArgs) Handles mControlManager.PageLoaded
// line of code
End Sub
Similar way....
Private Sub mErrorList_ErrorSelected(ByVal sender As Object, ByVal e As ErrorSelectedEventArgs) Handles mErrorList.ErrorSelected
// line of code
End Sub
但是在 dispose 方法中
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
Me.mErrorList = Nothing
Me.mControlManager = Nothing
End If
End If
Me.disposedValue = True
End Sub
在 dispose 方法中,我将对象设置为等于 Nothing。
所以我的问题是我需要在 Dispose() 方法或对象中移除 Handler 上面 = Nothing is sufficient. 以这种方式
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
RemoveHandler Me.mErrorList.ErrorSelected, AddressOf Me.mErrorList_ErrorSelected
Me.mErrorList = Nothing
RemoveHandler Me.mControlManager.PageLoaded, AddressOf mControlManager_PageLoaded
Me.mControlManager = Nothing
End If
End If
Me.disposedValue = True
End Sub
这里有几个问题,我会一一解释和回答。
Do I need to Call RemoveHandler when creating object declared
WithEvents
没有
Do I need to Dispose of objects in the Dispose method
如果您使用的任何对象实现 IDisposable
和 您 不是 包装然后在 Using
块然后 你的 class 也应该实现 IDisposable
并在每个对象上调用 Dispose
更多信息:Using block vs IDisposabe.Dispose()
Do I need to set each object = Nothing in the Dispose method
没有
更多信息:Set variables to "Nothing" is a good practice?
我已经声明了几个 WithEvent 处理程序,例如
Private WithEvents mErrorList As ErrorList
Private WithEvents mControlManager As ControlManager
我使用此处理程序订阅 class 中的事件,例如
Private Sub mControlManager_PageLoaded(sender As Object, e As DataEntry.PageLoadEventArgs) Handles mControlManager.PageLoaded
// line of code
End Sub
Similar way....
Private Sub mErrorList_ErrorSelected(ByVal sender As Object, ByVal e As ErrorSelectedEventArgs) Handles mErrorList.ErrorSelected
// line of code
End Sub
但是在 dispose 方法中
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
Me.mErrorList = Nothing
Me.mControlManager = Nothing
End If
End If
Me.disposedValue = True
End Sub
在 dispose 方法中,我将对象设置为等于 Nothing。 所以我的问题是我需要在 Dispose() 方法或对象中移除 Handler 上面 = Nothing is sufficient. 以这种方式
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
RemoveHandler Me.mErrorList.ErrorSelected, AddressOf Me.mErrorList_ErrorSelected
Me.mErrorList = Nothing
RemoveHandler Me.mControlManager.PageLoaded, AddressOf mControlManager_PageLoaded
Me.mControlManager = Nothing
End If
End If
Me.disposedValue = True
End Sub
这里有几个问题,我会一一解释和回答。
Do I need to Call RemoveHandler when creating object declared WithEvents
没有
Do I need to Dispose of objects in the Dispose method
如果您使用的任何对象实现 IDisposable
和 您 不是 包装然后在 Using
块然后 你的 class 也应该实现 IDisposable
并在每个对象上调用 Dispose
更多信息:Using block vs IDisposabe.Dispose()
Do I need to set each object = Nothing in the Dispose method
没有
更多信息:Set variables to "Nothing" is a good practice?