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