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