Auslösen eines Ereignisses
Die Funktionen für Ereignisse werden durch drei nicht zusammenhängende Elemente bereitgestellt: durch eine Klasse, die Ereignisdaten bereitstellt, durch einen Ereignisdelegaten und durch die Klasse, die das Ereignis auslöst. .NET Framework verfügt über eine Konvention für das Benennen der den Ereignissen zugeordneten Klassen und Methoden. Wenn eine Klasse das EventName-Ereignis auslösen soll, benötigen Sie die folgenden Elemente:
Eine Klasse EventNameEventArgs, die Ereignisdaten enthält. Diese Klasse muss von System.EventArgs abgeleitet sein.
Einen Delegaten für das Ereignis mit der Bezeichnung EventNameEventHandler.
Eine Klasse, die das Ereignis auslöst. Diese Klasse muss die Ereignisdeklaration (EventName) und eine Methode bereitstellen, die das Ereignis (OnEventName) auslöst.
Die Ereignisdatenklasse und die Ereignisdelegatklasse können bereits in der .NET Framework-Klassenbibliothek oder in der Klassenbibliothek eines Drittanbieters definiert sein. In diesem Fall müssen Sie diese Klassen nicht definieren. Wenn das Ereignis zum Beispiel keine benutzerdefinierten Daten verwendet, können Sie System.EventArgs für die Ereignisdaten und System.EventHandler für den Delegaten verwenden.
Sie definieren einen Ereignismember in der Klasse mit dem event-Schlüsselwort. Wenn der Compiler ein event-Schlüsselwort in der Klasse vorfindet, erstellt er einen privaten Member wie:
private EventNameHandler eh = null;
Der Compiler erstellt auch die zwei öffentlichen Methoden add_EventName
und remove_EventName
. Diese Methoden sind Ereignishooks, mit denen Delegaten kombiniert oder aus dem Ereignisdelegaten eh
entfernt werden können. Die Details bleiben dem Programmierer verborgen.
Hinweis
In anderen Sprachen als C# und Visual Basic 2005 generiert der Compiler möglicherweise den Code zu einem Ereignismember nicht automatisch. Ereignishooks und das private Delegatfeld müssen daher ggf. explizit definiert werden.
Sobald Sie die Ereignisimplementierung definiert haben, müssen Sie festlegen, wann das Ereignis ausgelöst werden soll. Sie lösen das Ereignis aus, indem Sie die geschützte OnEventName-Methode in der Klasse, die das Ereignis definiert, oder in einer abgeleiteten Klasse aufrufen. Die OnEventName-Methode löst das Ereignis durch das Aufrufen der Delegaten auf, wobei sie alle ereignisbezogenen Daten übergibt. Die Delegatmethoden für das Ereignis können Aktionen für das Ereignis ausführen oder die ereignisbezogenen Daten verarbeiten.
Hinweis
Die geschützte OnEventName-Methode ermöglicht es abgeleiteten Klassen auch, das Ereignis ohne Anfügen eines Delegaten zu überschreiben. Eine abgeleitete Klasse muss immer die OnEventName-Methode der Basisklasse aufrufen, um sicherzustellen, dass registrierte Delegaten das Ereignis empfangen.
Wenn Sie in einer anderen Klasse ausgelöste Ereignisse behandeln möchten, fügen Sie dem Ereignis Delegatmethoden hinzu. Wenn Sie mit dem Delegatmodell für Ereignisse in .NET Framework nicht vertraut sind, finden Sie weitere Informationen unter Ereignisse und Delegaten.
Siehe auch
Aufgaben
Gewusst wie: Auslösen und Behandeln von Ereignissen
Gewusst wie: Implementieren von Ereignissen in der Klasse