Question

Je travaille aussi à me familiariser avec C # qu'avec VB.NET (le langage utilisé sur mon lieu de travail). Une des meilleures choses à propos du processus d’apprentissage est qu’en vous familiarisant avec l’autre langue, vous avez tendance à en apprendre davantage sur votre langue principale - de petites questions comme celle-ci apparaissent:

Selon les sources que j'ai trouvées et l'expérience passée, un champ de VB.NET déclaré comme WithEvents est capable de déclencher des événements. Je comprends que C # n’a pas d’équivalent direct - mais ma question est la suivante: les champs sans ce mot-clé dans VB.NET ne peuvent pas déclencher d’événements. Y at-il un moyen de créer le même comportement en C #? Le compilateur VB empêche-t-il simplement la gestion de leurs événements pour ces objets (tout en leur permettant de déclencher des événements comme d’habitude)?

Je suis juste curieux; Je n'ai pas d'application particulière pour la question ...

Était-ce utile?

La solution

L'omission de WithEvents n'empêche pas les membres de déclencher des événements. Cela vous empêche simplement d'utiliser le mot clé 'handles' pour leurs événements.

Voici une utilisation typique de WithEvents:

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

Voici une classe qui n’utilise pas WithEvents et qui est approximativement équivalente. Cela montre pourquoi WithEvents est très utile:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top