Поведение ключевых слов в VB.NET WithEvents - ограничение компилятора VB.NET?

StackOverflow https://stackoverflow.com/questions/840691

Вопрос

Я работаю над тем, чтобы познакомиться с C # так же, как и с VB.NET (язык, используемый на моем рабочем месте). Одна из лучших особенностей процесса обучения заключается в том, что, изучая другой язык, вы, как правило, больше узнаете о своем основном языке - всплывают такие маленькие вопросы, как:

Согласно источникам, которые я нашел, и прошлому опыту, поле в VB.NET, объявленное как WithEvents , способно вызывать события. Я понимаю, что C # не имеет прямого эквивалента - но мой вопрос: у полей без это ключевое слово в VB.NET не может вызывать события, есть ли способ создать такое же поведение в C #? Компилятор VB просто блокирует эти объекты от обработки их событий (фактически позволяя им вызывать события как обычно)?

Мне просто любопытно; У меня нет конкретного заявления на этот вопрос ...

Это было полезно?

Решение

Пропуск WithEvents не блокирует участников от создания событий. Это просто мешает вам использовать ключевое слово «дескрипторы» в своих событиях.

Вот типичное использование WithEvents:

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