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 dem Ereignis zugeordneten Daten. 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.
Behandlung 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.
Warnungsausschluss
Schließen Sie keine Warnung dieser Regel aus.
Beispiel
Das folgende Beispiel zeigt einen für die Behandlung von Ereignissen geeigneten Delegaten. Die Methoden, die von diesem Ereignishandler aufgerufen werden können, entsprechen der in den Entwurfsrichtlinien festgelegten Signatur. AlarmEventHandler
ist der Name des Delegattypen. AlarmEventArgs
wird von der Basisklasse für Ereignisdaten, EventArgs, abgeleitet und enthält Alarmereignisdaten.
Imports System
Namespace DesignLibrary
Public Class AlarmEventArgs
Inherits EventArgs
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
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
Sichtbare Ereignishandler überprüfen
Siehe auch
Referenz
System.EventArgs
System.Object