Partager via


CA1009 : Déclarer les gestionnaires d'événements correctement

TypeName

DeclareEventHandlersCorrectly

CheckId

CA1009

Catégorie

Microsoft.CSharp

Modification avec rupture

Oui

Cause

Un délégué qui gère un événement public ou protégé n'a ni la signature, ni le type de retour, ni les noms de paramètres appropriés.

Description de la règle

Les méthodes du gestionnaire d'événements acceptent deux paramètres. Le premier est de type System.Object et se nomme « sender ». Il s'agit de l'objet qui déclenche l'événement. Le deuxième paramètre est de type System.EventArgs et se nomme « e ». Il s'agit des données qui sont associées à l'événement. Par exemple, si l'événement est déclenché à chaque fois qu'un fichier s'ouvre, les données d'événement contiennent en général le nom du fichier.

Les méthodes du gestionnaire d'événements ne doivent pas retourner de valeur. En langage de programmation C#, le type de retour void l'indique. Un gestionnaire d'événements peut appeler plusieurs méthodes dans plusieurs objets. Si les méthodes étaient autorisées à retourner une valeur, plusieurs valeurs de retour se présenteraient pour chaque événement, et seule la valeur de la dernière méthode appelée serait disponible.

Comment corriger les violations

Pour corriger une violation de cette règle, corrigez la signature, le type de retour, ou les noms de paramètres du délégué. Pour plus d'informations, consultez l'exemple suivant :

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

L'exemple suivant indique un délégué qui est adapté à la gestion des événements. Méthodes qui peuvent être appelées par ce gestionnaire d'événements conformément à la signature spécifiée dans les règles de conception. AlarmEventHandler est le nom du type du délégué. AlarmEventArgs dérive de la classe de base pour les données d'événement, EventArgs, et conserve les données d'événement d'alarme.

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);
}

Règles connexes

CA2109 : Passez en revue les gestionnaires d'événements visibles

Voir aussi

Référence

System.EventArgs

System.Object

Concepts

Événements et délégués