Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das
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.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
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 veranschaulicht, wie ein Ereignis abonniert und eine Ereignishandlermethode erstellt wird.
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 Sie nur innerhalb der Klasse (oder abgeleiteter Klassen) oder strukturieren können, in der Sie sie deklarieren (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.
Sie können Ereignisse als public, , , protected, internal, , oder private protectedprotected internal. 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 Sie Ereignisse als partialdeklarieren. 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.
-
static: Macht das Ereignis jederzeit für Aufrufer verfügbar, auch wenn keine Instanz der Klasse vorhanden ist. Weitere Informationen zu statischen Ereignissen finden Sie unter "Static Classes" und "Static Class Members". -
virtual: Ermöglicht abgeleiteten Klassen, das Ereignisverhalten mithilfe des Überschreibungsschlüsselworts außer Kraft zu setzen. Weitere Informationen zu virtuellen Ereignissen finden Sie unter Vererbung. -
sealed: Gibt an, dass es für abgeleitete Klassen nicht mehr virtuell ist. -
abstract: Der Compiler generiertaddkeine Blöcke undremoveEreignisaccessorblöcke und daher müssen abgeleitete Klassen eine eigene Implementierung bereitstellen.
Verwenden Sie das static Schlüsselwort, um ein Ereignis als statisches Ereignis zu deklarieren. 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.
Verwenden Sie das virtual Schlüsselwort, um ein Ereignis als virtuelles Ereignis zu markieren. 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 add den remove 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#.