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
Другие вопросы по тегам