AddHandler и Handles - в чем разница?
Я поняла что Handles
это только один способ добавить в конструктор AddHandler
, но в целом эти два эквивалентны?
2 ответа
Есть некоторая разница в том, когда именно подключен обработчик событий и что происходит вокруг него. Например, при использовании WithEvents
а также Handles
компилятор выдаст код, который обертывает доступ к переменной, содержащей экземпляр, который представляет событие в свойстве, а внутри установщика свойства он отсоединит обработчик события от предыдущего экземпляра (если есть), а затем присоединит обработчик события к новый экземпляр (если есть).
Это означает, что если вы берете следующие примеры кода, доступ к mm
будет вести себя по-другому:
' 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
в WithEvents
дело, mm = New SomeClass()
на самом деле вызовет установщик свойства, и Dim nn As SomeClass = mm
извлечет значение из метода получения свойства, тогда как во втором случае не будет создано никакого свойства для значения, но код получит прямой доступ к полю.
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