AddHandler与Handles - 有什么区别?

时间:2010-01-18 11:02:18

标签: vb.net handles addhandler

2 个答案:

答案 0 :(得分:3)

在附加事件处理程序时,确切地存在一些差异,以及它周围发生了什么。例如,当使用WithEventsHandles时,编译器将发出包含对包含在属性中公开事件的实例的变量的访问的代码,并且在属性setter内部将分离事件处理程序从前一个实例(如果有),然后将事件处理程序附加到新实例(如果有)。

这意味着如果您使用以下代码示例,则对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将从属性获取器中获取值,而在第二种情况下,将不会为值创建的属性,但代码将直接访问该字段。

答案 1 :(得分:0)

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