CA1009: Ereignishandler korrekt deklarieren
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
Kategorie |
Microsoft.Design |
Unterbrechende Änderung |
Breaking |
Ursache
Ein Delegat, der ein öffentliches oder geschütztes Ereignis behandelt, verfügt nicht über die richtige Signatur, den richtigen Rückgabetyp oder die richtigen Parameternamen.
Regelbeschreibung
Ereignishandlermethoden nehmen zwei Parameter an. Der erste Parameter ist vom Typ System.Object und wird "sender" genannt. Dies ist das Objekt, durch das das Ereignis ausgelöst wurde. Der zweite Parameter ist vom Typ System.EventArgs und wird "e" genannt. Dies sind die Daten, die dem Ereignis zugeordnet sind. Wenn das Ereignis z. B. beim Öffnen einer Datei ausgelöst wird, enthalten die Ereignisdaten in der Regel den Namen der Datei.
Ereignishandlermethoden sollten keinen Wert zurückgeben. In der Programmiersprache C# wird dies durch den Rückgabetyp void angegeben. Ein Ereignishandler kann mehrere Methoden in mehreren Objekten aufrufen. Wenn die Methoden einen Wert zurückgeben könnten, gäbe es für jedes Ereignis mehrere Rückgabewerte, allerdings stünde nur der Wert der zuletzt aufgerufenen Methode zur Verfügung.
Behandeln von Verstößen
Um einen Verstoß gegen diese Regel zu beheben, korrigieren Sie die Signatur, den Rückgabetyp oder die Parameternamen des Delegaten. Einzelheiten hierzu finden Sie im folgenden Beispiel.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Beispiel
Im folgenden Beispiel zeigt einen Delegaten, der für die Behandlung von Ereignissen geeignet ist. Die Methoden, die von diesem Ereignishandler aufgerufen werden können, entsprechen der in den Entwurfsrichtlinien angegebenen Signatur. AlarmEventHandler ist der Typname des Delegaten. AlarmEventArgs leitet sich von der Basisklasse für Ereignisdaten ab, EventArgs, und hält Alarmereignisdaten zurück.
Imports System
Namespace DesignLibrary
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
Public Class AlarmEventArgs
Inherits EventArgs
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class AlarmEventArgs : EventArgs {}
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
}
using namespace System;
namespace DesignLibrary
{
public ref class AlarmEventArgs : public EventArgs {};
public delegate void AlarmEventHandler(
Object^ sender, AlarmEventArgs^ e);
}
Verwandte Regeln
CA2109: Sichtbare Ereignishandler überprüfen