Freigeben über


Das event Schlüsselwort (C#-Referenz)

Ein Event ist ein Member, der es einem Objekt ermöglicht, Benachrichtigungen auszulösen. Benutzer von Ereignissen können Ereignissen ausführbaren Code hinzufügen, indem Sie Ereignishandler bereitstellen. Das event Schlüsselwort deklariert ein Ereignis. Das Ereignis ist ein Delegattyp. Während ein Objekt ein Ereignis auslöst, ruft das Ereignis alle bereitgestellten Ereignishandler auf. Ereignishandler sind Delegatinstanzen, die dem Ereignis hinzugefügt und ausgeführt werden, wenn das Ereignis ausgelöst wird. Benutzer von Ereignissen können ihre Ereignishandler zu einem Ereignis hinzufügen oder diese entfernen.

Das folgende Beispiel zeigt das Deklarieren und Auslösen eines Ereignisses, das EventHandler als zugrunde liegenden Delegattyp verwendet. Das vollständige Codebeispiel finden Sie unter How to publish events that conform to .NET Guidelines. In diesem Beispiel wird der generische EventHandler<TEventArgs> Delegattyp, das Abonnieren eines Ereignisses und das Erstellen einer Ereignishandlermethode veranschaulicht.

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"));
    }
}

Ereignisse sind Multicastdelegats, die nur aus der Klasse (oder abgeleiteten Klassen) aufgerufen werden können, oder um strukturieren, wo sie deklariert werden (die Herausgeberklasse). Wenn andere Klassen oder Strukturen das Ereignis abonnieren, werden ihre Ereignishandlermethoden aufgerufen, wenn die Publisher-Klasse das Ereignis auslöst. Weitere Informationen und Codebeispiele finden Sie unter Ereignisse und Delegaten.

Ereignisse können als public, , , protected, internal, , oder protected internalprivate protected. private Diese Zugriffsmodifizierer definieren, wie Benutzer der Klasse auf das Ereignis zugreifen können. Weitere Informationen finden Sie unter Zugriffsmodifizierer.

Ab C# 14 können Ereignisse sein partial. Teilereignisse verfügen über eine definierende Deklaration und eine Implementierungsdeklaration. Die definierende Deklaration muss die feldähnliche Syntax verwenden. Die Implementierungsdeklaration muss die add und remove Handler deklarieren.

Schlüsselwörter und Ereignisse

Die folgenden Schlüsselwörter gelten für Ereignisse.

Schlüsselwort BESCHREIBUNG Weitere Informationen finden Sie unter
static Stellt das Ereignis Aufrufern jederzeit zur Verfügung, auch wenn keine Instanz der Klasse vorhanden ist. Statische Klassen und statische Klassenmember
virtual Ermöglicht abgeleiteten Klassen, das Ereignisverhalten mithilfe des override-Schlüsselworts zu überschreiben. Vererbung
sealed Gibt an, dass es für abgeleitete Klassen nicht mehr virtuell ist.
abstract Der Compiler generiert nicht die add Blöcke und remove Ereignisaccessorblöcke und daher müssen abgeleitete Klassen eine eigene Implementierung bereitstellen.

Ein Ereignis kann mithilfe des statischen Schlüsselworts als statisches Ereignis deklariert werden. Statische Ereignisse sind jederzeit für Aufrufer verfügbar, auch wenn keine Instanz der Klasse vorhanden ist. Weitere Informationen finden Sie unter Statische Klassen und statische Klassenmember.

Ein Ereignis kann mithilfe des virtual Schlüsselworts als virtuelles Ereignis markiert werden. Abgeleitete Klassen können das Ereignisverhalten mithilfe des override Schlüsselworts überschreiben. Weitere Informationen finden Sie unter Vererbung. Ein Ereignis, das ein virtuelles Ereignis überschreibt, kann auch sein sealed, was angibt, dass es für abgeleitete Klassen nicht mehr virtuell ist. Schließlich kann ein Ereignis deklariert abstractwerden, was bedeutet, dass der Compiler keine Blöcke für remove den add Ereignisaccessor generiert. Daher müssen abgeleitete Klassen ihre eigene Implementierung bereitstellen.

C#-Sprachspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch