händelse (C#-referens)
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.
Exempel
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 som även visar hur du använder den allmänna EventHandler<TEventArgs> delegattypen och hur du prenumererar på en händelse och skapar en händelsehanterarmetod finns i Publicera händelser som följer .NET-riktlinjerna.
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 en särskild typ av 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 offentliga, privata, skyddade, interna, skyddade interna eller privata skyddade. Dessa åtkomstmodifierare definierar hur användare av klassen kan komma åt händelsen. Mer information finns i Åtkomstmodifierare.
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 |
virtuell | Tillåter härledda klasser att åsidosätta händelsebeteendet med hjälp av nyckelordet åsidosättning . | Arv |
stängd | Anger att för härledda klasser är det inte längre virtuellt. | |
abstrakt | Kompilatorn genererar inte händelseåtkomstblocken add och remove dä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. Detta gör händelsen tillgänglig 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 det virtuella nyckelordet. Detta gör det möjligt för härledda klasser att åsidosätta händelsebeteendet med hjälp av nyckelordet åsidosättning . Mer information finns i Arv. En händelse som åsidosätter en virtuell händelse kan också förseglas, vilket anger att den inte längre är virtuell för härledda klasser. Slutligen kan en händelse förklaras abstrakt, 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.