문제

VB.NET (직장에서 사용되는 언어)와 마찬가지로 C#에 익숙해지기 위해 노력하고 있습니다. 학습 과정에서 가장 좋은 점 중 하나는 다른 언어에 대해 배우면 기본 언어에 대해 더 많이 배우는 경향이 있다는 것입니다.

내가 찾은 출처와 과거 경험에 따르면 VB.net의 필드는 다음과 같이 선언됩니다. Withevents 이벤트를 제기 할 수 있습니다. C#이 직접 동등한 것이 없다는 것을 이해하지만 내 질문은 다음과 같습니다. 없이 vb.net 의이 키워드는 이벤트를 제기 할 수 없습니다. C#에서 동일한 동작을 만들 수있는 방법이 있습니까? VB 컴파일러는 이러한 객체가 이벤트를 처리하는 것을 막는 것만으로도 (실제로 평소와 같이 이벤트를 제기 할 수 있도록)?

나는 단지 궁금합니다. 질문에 대한 특별한 응용 프로그램이 없습니다 ...

도움이 되었습니까?

해결책

Withevents를 생략한다고해서 회원이 이벤트를 제기하는 것을 차단하지는 않습니다. 이벤트에서 'Handles'키워드를 사용하지 못하게됩니다.

다음은 일반적인 Weevents의 사용입니다.

Class C1
    Public WithEvents ev As New EventThrower()
    Public Sub catcher() Handles ev.event
        Debug.print("Event")
    End Sub
End Class

다음은 Withevents를 사용하지 않고 대략 동등한 클래스입니다. Withevents가 매우 유용한 이유를 보여줍니다.

Class C2
    Private _ev As EventThrower
    Public Property ev() As EventThrower

        Get
            Return _ev
        End Get

        Set(ByVal value As EventThrower)
            If _ev IsNot Nothing Then
                    removehandler _ev.event, addressof catcher
            End If
            _ev = value
            If _ev IsNot Nothing Then
                    addhandler _ev.event, addressof catcher
            End If
        End Set
    End Property

    Public Sub New()
        ev = New EventThrower()
    End Sub

    Public Sub catcher()
        Debug.print("Event")
    End Sub
End Class
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top