AddHandler vs. Poignées - Quelle est la différence?
-
21-09-2019 - |
Question
Je compris que Handles
est une seule façon d'ajouter dans le constructeur AddHandler
, mais en général sont ces deux sont équivalentes?
La solution
Il y a une certaine différence dans exactement quand le gestionnaire d'événements est attaché, et ce qui se passe autour d'elle. Par exemple, lors de l'utilisation WithEvents
et Handles
, le compilateur émet un code qui enveloppe l'accès à la variable contenant l'instance qui expose l'événement dans une propriété, et à l'intérieur du dispositif de réglage de propriété, il se détache le gestionnaire d'événements de l'instance précédente (le cas échéant) , puis fixez le gestionnaire d'événements à la nouvelle instance (le cas échéant).
Cela signifie que si vous prenez les exemples de code suivants, l'accès à mm
se comportera différemment:
' WithEvents approach '
Dim WithEvents mm As SomeClass
Sub Main()
mm = New SomeClass()
Dim nn As SomeClass = mm
End Sub
' Other approach '
Dim mm As SomeClass
Sub Main()
mm = New SomeClass()
Dim nn As SomeClass = mm
End Sub
Dans le cas de WithEvents
, mm = New SomeClass()
appellera en fait un poseur de propriété et Dim nn As SomeClass = mm
va récupérer la valeur d'un getter de la propriété, alors que dans le second cas, il n'y aura pas de propriété créée pour la valeur, mais le code accédera à la champ directement.
Autres conseils
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs)
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'this
AddHandler Button2.Click, AddressOf Button2_Click
'now Button2_Click looks like this
'Private Sub Button2_Click(ByVal sender As System.Object, _
'ByVal e As System.EventArgs) Handles Button2.Click
End Sub