Condividi tramite


event (Riferimenti per C#)

Un evento è un membro che consente a un oggetto di attivare notifiche. Gli utenti possono allegare codice eseguibile per gli eventi fornendo gestori eventi. La parola chiave event dichiara un evento. L'evento è di tipo delegato. Mentre un oggetto attiva un evento, l'evento richiama tutti i gestori eventi forniti. I gestori eventi sono istanze delegate aggiunte all'evento ed eseguite quando l'evento viene generato. Gli utenti possono aggiungere o rimuovere i relativi gestori eventi in un evento.

Esempio

L'esempio seguente illustra come dichiarare e generare un evento che usa EventHandler come tipo di delegato sottostante. Per l'esempio di codice completo che illustra anche come usare il tipo delegato EventHandler<TEventArgs> generico e PER come sottoscrivere un evento e creare un metodo del gestore eventi, vedere Come pubblicare eventi conformi alle linee guida .NET.

public class SampleEventArgs
{
    public SampleEventArgs(string text) { Text = text; }
    public string Text { get; } // readonly
}

public class Publisher
{
    // Declare the delegate (if using non-generic pattern).
    public delegate void SampleEventHandler(object sender, SampleEventArgs e);

    // Declare the event.
    public event SampleEventHandler SampleEvent;

    // Wrap the event in a protected virtual method
    // to enable derived classes to raise the event.
    protected virtual void RaiseSampleEvent()
    {
        // Raise the event in a thread-safe manner using the ?. operator.
        SampleEvent?.Invoke(this, new SampleEventArgs("Hello"));
    }
}

Gli eventi sono un tipo speciale di delegato multicast che può essere richiamato solo dall'interno della classe (o classi derivate) o dallo struct in cui sono dichiarati (la classe publisher). Se altre classi o altri struct sottoscrivono l'evento, i metodi di gestione eventi corrispondenti verranno chiamati quando la classe publisher genera l'evento. Per altre informazioni e altri esempi di codice, vedere Eventi e Delegati.

Gli eventi possono essere contrassegnati come pubblici, privati, protetti, interni, protetti interni o protetti privatI. Questi modificatori di accesso definiscono in che modo gli utenti della classe possono accedere all'evento. Per altre informazioni, vedere Modificatori di accesso.

Parole chiave ed eventi

Agli eventi si applicano le parole chiave seguenti.

Parola chiave Descrizione Ulteriori informazioni
static Rende l'evento disponibile per i chiamanti in qualsiasi momento, anche se non esiste alcuna istanza della classe. Classi statiche e membri di classi statiche
virtual Consente alle classi derivate di eseguire l'override del comportamento dell'evento tramite la parola chiave override. Ereditarietà
sealed Specifica che per le classi derivate l'evento non è più virtuale.
abstract Il compilatore non genererà i blocchi di funzioni di accesso degli eventi add e remove e pertanto le classi derivate dovranno fornire la propria implementazione.

Un evento può essere dichiarato statico mediante la parola chiave static. Ciò rende l'evento disponibile per i chiamanti in qualsiasi momento, anche se non esiste alcuna istanza della classe. Per altre informazioni, vedere Classi statiche e membri di classi statiche.

Un evento può essere contrassegnato come virtuale mediante la parola chiave virtual. Ciò consente alle classi derivate di eseguire l'override del comportamento dell'evento tramite la parola chiave override. Per altre informazioni, vedere Ereditarietà. Un evento che esegue l'override di un evento virtuale può anche essere contrassegnato come sealed, in modo che non risulti più virtuale per le classi derivate. Infine, un evento può essere dichiarato abstract, in modo che il compilatore non generi blocchi di funzioni di accesso agli eventi add e remove. Le classi derivate devono pertanto fornire la propria implementazione.

Specifiche del linguaggio C#

Per altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedi anche