Freigeben über


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

Siehe auch

Referenz

System.EventArgs

System.Object

Konzepte

Ereignisse und Delegaten