是否必须在 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?