gebeurtenis (C#-verwijzing)
Een gebeurtenis is een lid waarmee een object meldingen kan activeren. Gebeurtenisgebruikers kunnen uitvoerbare code voor gebeurtenissen koppelen door gebeurtenis-handlers op te leveren. Het event
trefwoord declareert een gebeurtenis. De gebeurtenis is van een type gemachtigde. Terwijl een object een gebeurtenis activeert, roept de gebeurtenis alle opgegeven gebeurtenis-handlers aan. Gebeurtenis-handlers zijn gedelegeerde instanties die aan de gebeurtenis zijn toegevoegd en worden uitgevoerd wanneer de gebeurtenis wordt gegenereerd. Gebeurtenisgebruikers kunnen hun gebeurtenis-handlers toevoegen of verwijderen voor een gebeurtenis.
Opmerking
In het volgende voorbeeld ziet u hoe u een gebeurtenis declareert en genereert die wordt gebruikt EventHandler als het onderliggende gedelegeerdentype. Voor het volledige codevoorbeeld dat ook laat zien hoe u het algemene EventHandler<TEventArgs> type gedelegeerde gebruikt en hoe u zich abonneert op een gebeurtenis en hoe u een gebeurtenis-handlermethode maakt, raadpleegt u Hoe u gebeurtenissen publiceert die voldoen aan .NET-richtlijnen.
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"));
}
}
Gebeurtenissen zijn een speciaal soort multicastdelegatie die alleen kan worden aangeroepen vanuit de klasse (of afgeleide klassen) of struct waar ze worden gedeclareerd (de uitgeversklasse). Als andere klassen of structs zich abonneren op de gebeurtenis, worden de methoden van de gebeurtenis-handler aangeroepen wanneer de uitgeverklasse de gebeurtenis genereert. Zie Gebeurtenissen en gemachtigden voor meer informatie en codevoorbeelden.
Gebeurtenissen kunnen worden gemarkeerd als openbaar, privé, beveiligd, intern, beveiligd intern of privé beveiligd. Deze toegangsaanpassingen bepalen hoe gebruikers van de klasse toegang hebben tot de gebeurtenis. Zie Toegangsmodifiers voor meer informatie.
Trefwoorden en gebeurtenissen
De volgende trefwoorden zijn van toepassing op gebeurtenissen.
Trefwoord | Beschrijving | Meer informatie |
---|---|---|
statisch | Maakt de gebeurtenis op elk gewenst moment beschikbaar voor bellers, zelfs als er geen exemplaar van de klasse bestaat. | Statische klassen en statische klasseleden |
virtueel | Hiermee kunnen afgeleide klassen het gedrag van de gebeurtenis overschrijven met behulp van het trefwoord overschrijven . | Erfenis |
Verzegeld | Hiermee geeft u op dat het voor afgeleide klassen niet meer virtueel is. | |
abstract | De compiler genereert add de blokken en remove gebeurtenistoegangspunten niet en daarom moeten afgeleide klassen hun eigen implementatie bieden. |
Een gebeurtenis kan worden gedeclareerd als een statische gebeurtenis met behulp van het statische trefwoord. Hierdoor is de gebeurtenis op elk gewenst moment beschikbaar voor bellers, zelfs als er geen exemplaar van de klasse bestaat. Zie Statische klassen en statische klasseleden voor meer informatie.
Een gebeurtenis kan worden gemarkeerd als een virtuele gebeurtenis met behulp van het virtuele trefwoord. Hierdoor kunnen afgeleide klassen het gedrag van gebeurtenissen overschrijven met behulp van het trefwoord overschrijven . Zie Overname voor meer informatie. Een gebeurtenis die een virtuele gebeurtenis overschrijft, kan ook worden verzegeld, wat aangeeft dat deze voor afgeleide klassen niet meer virtueel is. Ten slotte kan een gebeurtenis worden gedeclareerd als abstract, wat betekent dat de compiler de toegangsblokken en remove
gebeurtenistoegangsblokken niet genereertadd
. Daarom moeten afgeleide klassen hun eigen implementatie bieden.
C#-taalspecificatie
Zie de C#-taalspecificatie voor meer informatie. De taalspecificatie is de definitieve bron voor de C#-syntaxis en het gebruik.