Freigeben über


event (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.

Beispiel

Das folgende Beispiel zeigt das Deklarieren und Auslösen eines Ereignisses, das EventHandler als zugrunde liegenden Delegattyp verwendet. Das vollständige Codebeispiel, das auch veranschaulicht, wie der generische Delegattyp EventHandler<TEventArgs> verwendet, ein Ereignis abonniert und eine Ereignishandlermethode erstellt wird, finden Sie unter Veröffentlichen von Ereignissen, die den .NET-Richtlinien entsprechen.

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 eine besondere Art von Multicastdelegaten, die nur aus der Klasse (bzw. abgeleiteten Klasse) oder Struktur, in der sie deklariert sind (Publisher-Klasse), aufgerufen werden können. Wenn andere Klassen oder Strukturen das Ereignis abonnieren, werden ihre Ereignishandlermethoden aufgerufen werden, wenn die Publisher-Klasse das Ereignis auslöst. Weitere Informationen und Codebeispiele finden Sie unter Ereignisse und Delegaten.

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

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 für abgeleitete Klassen „virtual“ nicht mehr gilt.
abstract Der Compiler wird keine add- und remove-Ereignisaccessorblöcke generieren und daher müssen abgeleitete Klassen ihre eigene Implementierung bereitstellen.

Ein Ereignis kann mithilfe des static-Schlüsselworts als statisches Ereignis deklariert werden. Dadurch steht das Ereignis Aufrufern jederzeit zur Verfügung, 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 gekennzeichnet werden. Dies ermöglicht abgeleiteten Klassen, das Ereignisverhalten mithilfe des override-Schlüsselworts zu überschreiben. Weitere Informationen finden Sie unter Vererbung. Ein Ereignis, das ein virtuelles Ereignis überschreibt, kann auch sealed sein, was angibt, dass für abgeleitete Klassen „virtual“ nicht mehr gilt. Schließlich kann ein Ereignis als abstract deklariert werden, d.h., dass der Compiler die add- und remove-Ereignisaccessorblöcke nicht generieren wird. 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