2016-03-21 17 views
0

ich einige Withevent handlerr wieIst es obligatorisch zu RemoveEventHandler in Dispose() Mothod, Or classobject = Nichts ist ausreichend

Private WithEvents mErrorList As ErrorList

Private WithEvents mControlManager As ControlManager

erklärt haben, habe ich diese Handler Abonnieren Sie die Ereignisse in einer Klasse wie

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 

aber in dispose-Methode

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  

Im dispose-Methode stelle ich die Objekte als zu Nichts gleich. Also meine Frage muss ich über den Handler in entfernen Dispose() Methode oder Objekt = Nichts ist ausreichend. in einer solchen Art und Weise

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 
+0

Keiner dieser Code ist korrekt. Verwenden Sie die Dispose-Methode nur, um die Dispose-Methode für alle Felder in Ihrer Klasse aufzurufen, wenn sie eine haben. –

+0

@HansPassant Ich habe gerade Code hinzugefügt, um den anderen SO-Benutzer zu verstehen. meine Frage ist, verwende ich RemoveHandler In Dispose() oder nicht. während ich Werte auf nichts von Klassenobjekt (Variable) setze. – Pritish

Antwort

2

Es gibt ein paar Fragen hier, also werde ich paraphrasieren und eins nach dem anderen beantworten.

Muss ich RemoveHandler Call beim Erstellen Objekt Withevents deklariert

Kein

ich von Objekten in der Methode Dispose entsorgen müssen Sie auf

Wenn eine Objekte, die Sie verwenden, implementieren IDisposableund Sie sind nicht Verpackung dann in einem Using Block dann Ihre Klasse auch IDisposable und Dispose

Weitere Informationen zu jedem dieser Objekte aufrufen implementieren sollten: Using block vs IDisposabe.Dispose()

Muss ich festlegen müssen jedes Objekt = Nothing in der Dispose-Methode

Keine

Weitere Informationen: Set variables to "Nothing" is a good practice?