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