Ereignisentwurf

Aktualisiert: November 2007

Ereignisse sind Mechanismen, die die Ausführung von anwendungsspezifischem Code ermöglichen, wenn eine Aktion erfolgt. Ereignisse treten entweder vor der zugeordneten Aktion (vorherige Ereignisse) oder nach der zugeordneten Aktion (spätere Ereignisse) ein. Wenn beispielsweise ein Benutzer auf eine Schaltfläche in einem Fenster klickt, wird ein späteres Ereignis ausgelöst, das die Ausführung anwendungsspezifischer Methoden zulässt. An die Methode, die ausgeführt werden soll, wenn das System ein Ereignis auslöst, wird ein Ereignishandlerdelegat gebunden. Der Ereignishandler wird dem Ereignis hinzugefügt, damit er die zugehörige Methode aufrufen kann, wenn das Ereignis ausgelöst wird. Ereignisse können über ereignisspezifische Daten verfügen (z. B. kann ein Ereignis für das Drücken der Maustaste Daten über die Cursorposition auf dem Bildschirm umfassen).

Die Signatur der Ereignisbehandlungsmethode ist mit der Signatur des Ereignishandlerdelegaten identisch. Für die Ereignishandlersignatur gelten die folgenden Konventionen:

  • Der Rückgabetyp ist Void.

  • Der erste Parameter lautet sender und ist vom Typ Object. Dies ist das Objekt, durch das das Ereignis ausgelöst wurde.

  • Der zweite Parameter lautet e und ist vom Typ EventArgs oder eine abgeleitete Klasse von EventArgs. Dies sind die ereignisspezifischen Daten.

  • Die Methode akzeptiert genau zwei Parameter.

Weitere Informationen über Ereignisse finden Sie unter Behandeln und Auslösen von Ereignissen.

Verwenden Sie System.EventHandler<T>, statt manuell neue Delegaten zu erstellen, die als Ereignishandler verwendet werden sollen.

Diese Richtlinie gilt hauptsächlich für neue Featurebereiche. Wenn Sie die Funktionalität in einem Bereich erweitern, in dem bereits nicht generische Ereignishandler verwendet werden, können Sie weiterhin nicht generische Ereignishandler nutzen, um die Konsistenz des Entwurfs zu bewahren.

Sie können diese Richtlinie nicht einhalten, wenn Ihre Bibliothek für Versionen von .NET Framework konzipiert ist, die keine Generika unterstützen.

Verwenden Sie eine abgeleitete Klasse von System.EventArgs als Ereignisargument, es sei denn, Sie wissen genau, dass das Ereignis niemals Daten an die Ereignisbehandlungsmethode übergeben muss. In diesem Fall können Sie den Typ System.EventArgs direkt verwenden.

Wenn Sie ein Ereignis definieren, das statt einer von Ihnen definierten Klasse eine EventArgs-Instanz akzeptiert, können Sie in späteren Versionen dem Ereignis keine Daten hinzufügen. Aus diesem Grund ist es vorzuziehen, eine leere abgeleitete Klasse von EventArgs zu erstellen. Dies ermöglicht es Ihnen, dem Ereignis in späteren Versionen Daten hinzuzufügen, ohne die Konsistenz des Codes zerstörende Änderungen einzuführen.

Verwenden Sie zum Auslösen jedes Ereignisses eine geschützte virtuelle Methode. Dies gilt nur für nicht statische Ereignisse in unversiegelten Klassen, nicht für Strukturen, versiegelte Klassen oder statische Ereignisse.

Wenn diese Richtlinie eingehalten wird, können abgeleitete Klassen ein Basisklassenereignis durch Überschreiben der geschützten Methode behandeln. Der Name der geschützten virtual-Methode (Overridable in Visual Basic) sollte mit dem Ereignisnamen identisch sein, und dem Namen sollte On vorangestellt werden. Beispielsweise lautet für das Ereignis "TimeChanged" der Name der geschützten virtuellen Methode "OnTimeChanged".

ms229011.alert_caution(de-de,VS.90).gifWichtiger Hinweis:

Abgeleitete Klassen, die die geschützte virtuelle Methode überschreiben, müssen nicht die Basisklassenimplementierung aufrufen. Die Basisklasse muss weiterhin ordnungsgemäß ausgeführt werden, auch wenn ihre Implementierung nicht aufgerufen wird.

Verwenden Sie einen Parameter, der als die Ereignisargumentklasse für die geschützte Methode typisiert ist, die das Ereignis auslöst. Der Name des Parameters sollte e lauten.

Die FontDialog-Klasse stellt die folgende Methode bereit, die das Apply-Ereignis auslöst:

Protected Overridable Sub OnApply( ByVal e As EventArgs )
protected virtual void OnApply(EventArgs e);

Übergeben Sie beim Auslösen eines nicht statischen Ereignisses nicht NULL (Nothing in Visual Basic) als Absenderparameter.

Für statische Ereignisse muss der sender-Parameter null (Nothing in Visual Basic) sein.

Übergeben Sie beim Auslösen eines Ereignisses nicht NULL (Nothing in Visual Basic) als Ereignisdatenparameter.

Wenn keine Ereignisdaten vorhanden sind, übergeben Sie Empty statt null.

Berücksichtigen Sie die Ausführung von beliebigem Code in der Ereignishandlermethode.

Sie sollten den Code zum Auslösen des Ereignisses in einen try-catch-Block einfügen, um die Beendigung des Programms aufgrund unbehandelter Ausnahmen, die von den Ereignishandlern ausgelöst werden, zu verhindern.

Lösen Sie Ereignisse aus, die der Endbenutzer abbrechen kann. Dies gilt nur für vorherige Ereignisse.

Wenn Sie ein Ereignis entwerfen, das abgebrochen werden kann, verwenden Sie als Basisklasse für das Ereignisdatenobjekt eCancelEventArgs anstelle von EventArgs.

Copyright für einzelne Teile 2005 Microsoft Corporation. Alle Rechte vorbehalten.

Copyright für einzelne Teile Addison-Wesley Corporation. Alle Rechte vorbehalten.

Weitere Informationen zu Entwurfsrichtlinien finden Sie im Buch "Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries" von Krzysztof Cwalina und Brad Abrams, veröffentlicht von Addison-Wesley, 2005.

Siehe auch

Konzepte

Entwurf benutzerdefinierter Ereignishandler

Weitere Ressourcen

Entwurfsrichtlinien für Member

Entwurfsrichtlinien zum Entwickeln von Klassenbibliotheken