2010-03-19 10 views
2

키워드와 연결된 모든 처리기를 "제거"하기 때문에 WithEvents 변수를 Nothing으로 설정하면 Destuctor에 설정됩니다. 이 클래스는 파생 클래스에도 동일한 효과가 있습니까?파생 클래스의 RemoveHandlers

Class A 
    Protected WithEvents _Foo as Button 

    Private Sub _Foo_Click Handles _Foo.Click 
     ' ... some Click action ' 
    End Sub 

    Public Sub Dispose(disposing as Boolean) 
     If disposing then _Foo = Nothing ' remove handler _Foo_Click ' 
    End Sub 
End Class 

Class B 
    Inherits A 

    Private Sub _Foo_Move Handles _Foo.Move 
     ' ... some Move action ' 
    End Sub 

    ' ????? will or NOT remove OR handler _Foo_Move the base Dispose??' 
    Public Overrides Sub Dispose(disposing as Boolean)   
     'If disposing then _Foo = Nothing ' 
     MyBase.Dispose(disposing) 
    End Sub 
End Class 

ps. 더 명확하게하기 위해 _Foo 버튼이 외부에서 제공되어 A 클래스보다 더 오래 살고 있다고 가정합니다.

+0

+1 Dispose에서 와이어링 이벤트의 중요성을 관찰합니다. Minor nit : WithEvents를 "foo"로 선언하면 "foo"라는 속성과 "_foo"라는 필드가 생성됩니다. "_foo"라는 것을 호출하면 필드가 "__foo"가 될 것이지만 속성 이름 "_foo"는 배킹 필드 이름처럼 보일 것입니다. – supercat

답변

1

예. 파생 클래스의 _Foo = Nothing 문은 기본 클래스의 보호 된 로컬 _Foo을 아무 것도 아닌 것으로 변경하여 모든 이벤트 처리기를 제거합니다.

관련 문제