Partager via


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

Mise à jour : novembre 2007

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 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 présente un délégué approprié à la gestion d'événements. Les méthodes qui peuvent être appelées par ce gestionnaire d'événements se conforment à la signature spécifiée dans les règles de conception. AlarmEventHandler constitue le nom de type du délégué. AlarmEventArgs dérive de la classe de base des données d'événement, EventArgs, et contient des données de l'événement Alarm.

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

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

Voir aussi

Concepts

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

Référence

System.EventArgs

System.Object