发布于 2010-01-18 19:22:46
在附加事件处理程序的确切时间以及事件处理程序周围发生的事情方面存在一些差异。例如,当使用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将从属性获取方法获取值,而在第二种示例中,将不会为值创建属性,但代码将直接访问该字段。
发布于 2010-01-19 06:08:20
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 Subhttps://stackoverflow.com/questions/2085471
复制相似问题