AddHandler и Handles - в чем разница? - PullRequest

Ответы [ 2 ]

3 голосов
/ 18 января 2010

Существует некоторая разница в том, когда именно подключен обработчик событий и что происходит вокруг него. Например, при использовании 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 будет извлекать значение из получателя свойства, тогда как во втором случае не будет создано никакого свойства для значения, но код получит доступ к полю напрямую.

0 голосов
/ 19 января 2010
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
...