1

コンストラクターにを追加する方法は1つしかないことを理解しHandlesAddHandlerましたが、一般的に、これら2つは同等ですか?

4

2 に答える 2

3

イベントハンドラーがアタッチされる正確なタイミングと、その周りで何が起こっているかには、いくつかの違いがあります。たとえば、とを使用するWithEventsHandles、コンパイラは、プロパティでイベントを公開するインスタンスを保持する変数へのアクセスをラップするコードを発行し、プロパティセッター内で、イベントハンドラーを前のインスタンス(存在する場合)からデタッチします。次に、イベントハンドラーを新しいインスタンス(存在する場合)にアタッチします。

これは、次のコードサンプルを取得すると、へのアクセスの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プロパティゲッターから値をフェッチします。2番目のケースでは、値に対してプロパティは作成されませんが、コードはフィールドに直接アクセスします。

于 2010-01-18T11:22:46.027 に答える
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
于 2010-01-18T22:08:20.053 に答える