2010-01-18 4 views

답변

3

정확하게 이벤트 처리기가 연결될 때와 그 주변에서 어떤 차이가 있습니다. 예를 들어, WithEventsHandles을 사용하면 컴파일러는 속성에서 이벤트를 노출하는 인스턴스를 보유하는 변수에 대한 액세스를 래핑하는 코드를 내보내고 속성 설정자에서는 이전 인스턴스 (있는 경우)에서 이벤트 핸들러를 분리합니다. , 새 인스턴스에 이벤트 처리기를 연결하십시오 (있는 경우).

WithEvents 경우
' 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 

, mm = New SomeClass() 사실에 속성 setter를 호출하고, Dim nn As SomeClass = mm이 값을 가져옵니다 :

는 다음 코드 샘플을 채취하는 경우, mm에 대한 액세스가 다르게 작동한다는 것을 의미 두 번째 경우에는 값에 대해 생성 된 속성이 없지만 코드는 필드에 직접 액세스합니다. ** AddHanlder **에 최적 사용 즉

+0

,의는, * 자원 *과 속도, ** 코드에 대한 WithEvents는 **가 * 가독성을 가정 해 봅시다 *? .. – serhio

+0

그리고 무엇 분리에 대한 개체가 더 이상 그것에 대한 참조가 없을 때 이벤트 처리기? – serhio

+1

@serhio : WithEvents를 사용하여 가독성을 높이는 방법에 대한 논의가있을 수 있지만, 일반적으로 나는 당신이 옳다고 생각합니다. 'WithEvents'는 필드를'Nothing'으로 설정할 때 이벤트 핸들러를 분리하는 메커니즘도 가지고 있습니다. 이벤트 처리기를 분리하지 않으면 오브젝트가 가비지 수집되지 않습니다. –

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 
+2

일 수 있습니다. Distructor 비헤이비어를 잊었을 때 핸들은 버튼에서 핸들러를 제거합니다. – serhio

관련 문제