VB.NET Withevents Schlüsselwort Verhalten - VB.NET Compiler Einschränkung?
-
20-08-2019 - |
Frage
Ich arbeite so vertraut mit C #, wie ich mit VB.NET bin (die Sprache am Arbeitsplatz verwendet wird) auf immer. Eines der besten Dinge über den Lernprozess ist, dass über die andere Sprache durch das Lernen Sie neigen dazu, mehr über Ihre primäre Sprache zu lernen - wenig Fragen wie diese Pop-up:
Nach den Quellen, die ich gefunden habe, und Erfahrungen aus der Vergangenheit, ein Feld in VB.NET, die deklariert wird als Withevent ist in der Lage Ereignisse zu erhöhen. Ich verstehe, dass C # keine direkte Entsprechung hat - aber meine Frage ist: Felder ohne dieses Schlüsselwort in VB.NET kann keine Ereignisse erhöhen, ist es eine Möglichkeit, das gleiche Verhalten in C # zu erstellen? Hat der VB-Compiler einfach blockieren diese Objekte aus, deren Ereignisse behandelt (während sie in Wirklichkeit so dass sie Ereignisse wie üblich erhöhen)?
Ich bin nur neugierig; Ich habe keine besondere Anwendung für die Frage ...
Lösung
Withevents Weglassen nicht blockiert Mitglieder von Ereignissen zu erhöhen. Es hört man nur von der Nutzung des ‚Griffe‘ Schlüsselwort auf ihren Veranstaltungen.
Hier ist eine typische Verwendung von Withevent:
Class C1
Public WithEvents ev As New EventThrower()
Public Sub catcher() Handles ev.event
Debug.print("Event")
End Sub
End Class
Hier ist eine Klasse, die Withevents nicht verwendet und ist in etwa gleichwertig. Es zeigt, warum Withevents ist sehr nützlich:
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