Generazione di un evento
La funzionalità di gestione degli eventi è costituita da tre elementi correlati: una classe che fornisce dati evento, un delegato di evento e la classe che genera l'evento. .NET Framework adotta una convenzione per la denominazione di classi e metodi relativi agli eventi. Se si desidera che la propria classe generi un evento denominato EventName, è necessario disporre degli elementi riportati di seguito.
Una classe che contiene i dati degli eventi, denominata EventNameEventArgs. Tale classe deve derivare da System.EventArgs.
Un delegato dell'evento, denominato EventNameEventHandler.
Una classe che genera l'evento. Tale classe deve fornire la dichiarazione di evento (EventName) e un metodo che genera l'evento (OnEventName).
È possibile che la classe dei dati evento e la classe delegato di evento siano già definite nella libreria di classi .NET Framework o in una libreria di classi di altri produttori. In tal caso, non sarà necessario definire tali classi. Se, ad esempio, l'evento non utilizza dati personalizzati, è possibile utilizzare System.EventArgs per i dati dell'evento e System.EventHandler per il delegato.
Per definire un membro evento nella classe, utilizzare la parola chiave event. Quando il compilatore trova la parola chiave event nella classe, crea un membro privato, ad esempio:
private EventNameHandler eh = null;
Il compilatore crea anche i due metodi pubblici add_EventName
e remove_EventName
. Tali metodi sono hook di evento che consentono di unire o dissociare delegati dal delegato di evento eh
. Tali dettagli sono invisibili al programmatore.
Nota
In linguaggi diversi da C# e Visual Basic 2005, è possibile che il compilatore non generi automaticamente il codice corrispondente a un membro evento e che occorra quindi definire gli hook di evento e il campo delegato privato in modo esplicito.
Dopo aver definito l'implementazione dell'evento, è necessario stabilire il momento in cui generare l'evento. Per generare l'evento, chiamare il metodo protetto OnEventName nella classe che ha definito l'evento o in una classe derivata. Il metodo OnEventName genera l'evento richiamando i delegati, passando tutti i dati specifici dell'evento. I metodi del delegato relativi all'evento possono eseguire azioni per l'evento o elaborare i dati specifici dell'evento.
Nota
Il metodo protetto OnEventName consente inoltre alle classi derivate di eseguire l'override dell'evento senza dover collegare un delegato. Perché l'evento sia ricevuto da delegati registrati, occorre che le classi derivate chiamino sempre il metodo OnEventName della classe base.
Quando si desidera gestire eventi generati in un'altra classe, aggiungere metodi delegati all'evento. Se non si ha familiarità con il modello a delegati per gli eventi in .NET Framework, vedere Eventi e delegati.
Vedere anche
Attività
Procedura: generare e utilizzare eventi
Procedura: implementare eventi nella classe