In Visual Basic, gli eventi (Events) consentono a un oggetto di notificare ad altri componenti dell'applicazione che si sono verificati cambiamenti. Un evento viene dichiarato tramite la parola chiave Event. Viene invocato utilizzando il metodo RaiseEvent (VB.NET) o Raise (VB6), e i componenti possono iscriversi ad esso (Handles/WithEvents).
Esempio VB.NET:
Public Class Worker Public Event WorkCompleted As EventHandler Public Sub DoWork() ' ...qualche lavoro RaiseEvent WorkCompleted(Me, EventArgs.Empty) End Sub End Class Public Class Manager Private WithEvents w As Worker Public Sub New() w = New Worker() End Sub Private Sub w_WorkCompleted(sender As Object, e As EventArgs) Handles w.WorkCompleted Console.WriteLine("Lavoro completato!") End Sub End Class
Punti importanti:
WithEvents può essere usato solo con campi e proprietà di classe.È possibile dichiarare un evento con un modificatore di accesso
Privatee iscriversi ad esso da un'altra classe?
Risposta: No, il modificatore Private limita la visibilità dell'evento solo a quella classe in cui è stato dichiarato. Altre classi non lo vedranno e quindi non potranno iscriversi.
Storia
In una grande applicazione, gli eventi venivano creati con il modificatore
Public, ma non venivano mai esplicitamente disiscritti. Durante un lungo utilizzo dell'applicazione, ciò portava a perdite di memoria in quanto i gestori si riferivano a oggetti non necessari.
Storia
Durante la migrazione da VB6 a VB.NET, lo sviluppatore si aspettava che l'evento fosse disponibile in tutti i moduli, ma per impostazione predefinita l'evento era
Friend. Di conseguenza, il gestore non veniva attivato, e questo bug è stato trovato solo nei test di integrazione.
Storia
Un programmatore ha commesso un errore nella firma del delegato dell'evento, scambiando
senderee. Non c'era alcun messaggio di errore (il gestore dell'evento non veniva semplicemente chiamato), e la logica di business necessaria veniva silenziosamente saltata fino al rilascio pre-final.