Comportement du mot clé VB.NET WithEvents - Restriction du compilateur VB.NET?
-
20-08-2019 - |
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 ...
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