Domanda

Sto lavorando per acquisire familiarità con C # come lo sono con VB.NET (il linguaggio usato nel mio posto di lavoro). Una delle cose migliori del processo di apprendimento è che imparando sull'altra lingua tendi a saperne di più sulla tua lingua principale - si aprono piccole domande come questa:

Secondo le fonti che ho trovato e l'esperienza passata, un campo in VB.NET che è dichiarato come WithEvents è in grado di generare eventi. Capisco che C # non ha un equivalente diretto - ma la mia domanda è: i campi senza questa parola chiave in VB.NET non può generare eventi, c'è un modo per creare questo stesso comportamento in C #? Il compilatore VB semplicemente impedisce a questi oggetti di gestire i loro eventi (mentre in realtà consente loro di generare eventi come al solito)?

Sono solo curioso; Non ho alcuna domanda particolare per la domanda ...

È stato utile?

Soluzione

L'omissione di WithEvents non impedisce ai membri di organizzare eventi. Ti impedisce solo di usare la parola chiave "handle" nei loro eventi.

Ecco un uso tipico di WithEvents:

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

Ecco una classe che non usa WithEvents ed è approssimativamente equivalente. Dimostra perché WithEvents è abbastanza 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top