答案 0 :(得分:3)
在附加事件处理程序时,确切地存在一些差异,以及它周围发生了什么。例如,当使用WithEvents
和Handles
时,编译器将发出包含对包含在属性中公开事件的实例的变量的访问的代码,并且在属性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