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

Konzepte

Ereignisse und Delegaten