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 ...

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top