Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Nyckelordet
En händelse är en medlem som gör det möjligt för ett objekt att utlösa meddelanden. Händelseanvändare kan bifoga körbar kod för händelser genom att ange händelsehanterare. Nyckelordet event deklarerar en händelse. Händelsen är av en ombudstyp. Medan ett objekt utlöser en händelse anropar händelsen alla angivna händelsehanterare. Händelsehanterare är delegerade instanser som läggs till i händelsen och körs när händelsen aktiveras. Händelseanvändare kan lägga till eller ta bort sina händelsehanterare för en händelse.
I följande exempel visas hur du deklarerar och genererar en händelse som använder EventHandler som den underliggande delegattypen. Det fullständiga kodexemplet finns i Publicera händelser som följer .NET-riktlinjerna. Det exemplet visar den allmänna EventHandler<TEventArgs> ombudstypen, hur du prenumererar på en händelse och skapar en händelsehanterarmetod.
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"));
    }
}
Händelser är multicast-ombud som bara kan anropas inifrån klassen (eller härledda klasser) eller struct där de deklareras (utgivarklassen). Om andra klasser eller structs prenumererar på händelsen anropas deras händelsehanterarmetoder när utgivarklassen genererar händelsen. Mer information och kodexempel finns i Händelser och ombud.
Händelser kan markeras som public, private, protected, internal, protected internaleller private protected. Dessa åtkomstmodifierare definierar hur användare av klassen kan komma åt händelsen. Mer information finns i Åtkomstmodifierare.
Från och med C# 14 kan händelser vara partial. Partiella händelser har en definierande deklaration och en implementeringsdeklaration. Den definierande deklarationen måste använda den fältliknande syntaxen. Implementeringsdeklarationen måste deklarera add- och remove-hanterarna.
Nyckelord och händelser
Följande nyckelord gäller för händelser.
| Nyckelord | beskrivning | Mer information | 
|---|---|---|
| static | Gör händelsen tillgänglig för anropare när som helst, även om det inte finns någon instans av klassen. | Statiska klasser och statiska klassmedlemmar | 
| virtual | Tillåter härledda klasser att åsidosätta händelsebeteendet med hjälp av nyckelordet åsidosättning . | Arv | 
| sealed | Anger att för härledda klasser är det inte längre virtuellt. | |
| abstract | Kompilatorn genererar inte händelseåtkomstblocken addochremovedärför måste härledda klasser tillhandahålla en egen implementering. | 
En händelse kan deklareras som en statisk händelse med hjälp av det statiska nyckelordet. Statiska händelser är tillgängliga för anropare när som helst, även om det inte finns någon instans av klassen. Mer information finns i Statiska klasser och Statiska klassmedlemmar.
En händelse kan markeras som en virtuell händelse med hjälp av nyckelordet virtual . Härledda klasser kan åsidosätta händelsebeteendet med hjälp av nyckelordet override . Mer information finns i Arv. En händelse som åsidosätter en virtuell händelse kan också vara sealed, som anger att den inte längre är virtuell för härledda klasser. Slutligen kan en händelse deklareras abstract, vilket innebär att kompilatorn inte genererar händelseåtkomstblocken add och remove . Därför måste härledda klasser tillhandahålla en egen implementering.
Språkspecifikation för C#
Mer information finns i C#-språkspecifikationen. Språkspecifikationen är den slutgiltiga källan för C#-syntax och -användning.