Utiliser des événements lorsque cela est approprié
Mise à jour : novembre 2007
TypeName |
UseEventsWhereAppropriate |
CheckId |
CA1030 |
Catégorie |
Microsoft.CSharp |
Modification avec rupture |
Modification sans rupture |
Cause
Le nom d'une méthode publique, protégée ou privée commence par l'un des éléments suivants :
AddOn
RemoveOn
Fire
Raise
Description de la règle
Cette règle détecte des méthodes qui présentent des noms qui ordinairement seraient utilisés pour des événements. Les événements suivent le modèle de design observateur ou publier/abonner ; ils sont utilisés lorsqu'une modification d'état au sein d'un objet donné doit être communiquée à d'autres objets. Si une méthode est appelée en réponse à une modification d'état clairement définie, la méthode doit être appelée par un gestionnaire d'événements. Les objets qui appellent la méthode doivent déclencher des événements au lieu d'appeler directement la méthode.
Quelques exemples communs d'événements sont présents dans les applications d'interface utilisateur où une action de l'utilisateur, telle qu'un clic sur un bouton, provoque l'exécution d'un segment de code. Le modèle d'événement du .NET Framework n'est pas limité aux interfaces utilisateur ; il doit être utilisé partout où vous devez communiquer des modifications d'état à un ou plusieurs objets.
Comment corriger les violations
Si la méthode est appelée lorsque l'état d'un objet change, vous devez envisager de modifier le design pour utiliser le modèle d'événement du .NET Framework.
Quand supprimer les avertissements
Supprimez un avertissement de cette règle si la méthode ne fonctionne pas avec le modèle d'événement du .NET Framework.
Exemple
L'exemple suivant montre une méthode qui tente de communiquer une modification d'état (dans ce cas, la fermeture de son type déclarant, Book) en appelant un délégué.
using System;
namespace Samples
{
public delegate void ClosedCallback(Book book);
public class Book
{
private ClosedCallback _ClosedCallback;
// Violates this rule
public void AddOnClosed(ClosedCallback callback)
{
_ClosedCallback = callback;
}
public void Close()
{
_ClosedCallback(this);
}
}
}
La classe suivante résout l'exemple ci-dessus en se transformant en modèle d'événement .NET Framework.