2009-04-23 4 views
2

FxCop se plaint d'une déclaration de gestionnaire d'événements que j'ai. Je ne vois pas ce qui ne va pas avec le code malgré la lecture de l'avertissement plusieurs fois.Comment déclarer des gestionnaires d'événements pour passer une règle FxCop, en particulier pour inclure l'expéditeur et l'e?

code dans mon contrôle utilisateur

//This next line Fx Cops doesn't like. 
public event ImageClickEventHandler NewEntity; //A thingy defined in the BCL 

private void ImgBtnAdd_Click(object sender, ImageClickEventArgs e) 
{ 
    NewEntity(sender, e); 
} 

code dans la page qui utilise le contrôle

protected override void OnInit(EventArgs e) 
{ 
EntitySearch1.NewEntity += EntitySearch1_NewEntity; 
//etc. 
} 

Mais FxCop dit:

Par convention, les événements .NET ont deux paramètres qui spécifient les l'expéditeur d'événement et les données d'événement. Les signatures de gestionnaire d'événements doivent suivre ce formulaire: void MyEventHandler (expéditeur d'objet, EventArgs e). Le paramètre 'expéditeur' est toujours de type System.Object, même s'il est possible d'utiliser un type plus spécifique. Le paramètre 'e' est toujours de type System.EventArgs. Les événements qui ne fournissent pas de données d'événement doivent utiliser le type de délégué System.EventHandler. Les gestionnaires d'événements renvoient void afin qu'ils puissent envoyer chaque événement à plusieurs méthodes cibles. Toute valeur renvoyée par une cible serait perdue après le premier appel .

Répondre

2

Cela me semble faux - le paramètre «e» certainement n'est pas toujours EventArgs; c'est juste classiquement un type qui dérive de EventArgs.

ImageClickEventArgs dérive de EventArgs, donc cela me semble bien. Je pense que FxCop est un peu plus strict qu'il ne devrait l'être.

Questions connexes