En C# gestionnaire d'événements, pourquoi faut-il de l ' “expéditeur” paramètre être un objet?

Selon Microsoft événement règles de nommage, le sender paramètre en C# gestionnaire d'événement "est toujours de type objet, même s'il est possible d'utiliser un type spécifique".

Cela conduit à beaucoup de code de gestion des événements comme:

RepeaterItem item = sender as RepeaterItem;
if (item != null) { /* Do some stuff */ }

Pourquoi la convention conseiller contre le fait de déclarer un gestionnaire d'événements plus spécifiques, de type?

MyType
{
    public event MyEventHander MyEvent;
}

...

delegate void MyEventHander(MyType sender, MyEventArgs e);

Ai-je raté une chasse aux sorcières?


Pour la postérité: je suis d'accord avec le sentiment général dans les réponses que la convention est à l'utilisation de l'objet (et pour transmettre les données via le EventArgs), même lorsqu'il est possible d'utiliser un type spécifique, et dans le vrai monde de la programmation, il est important de suivre la convention.

Edit: appât pour la recherche: RSPEC-3906 règle "des Gestionnaires d'Événement doit avoir la signature correcte"

  • En fait, tous les types en C# sont des objets...
  • Pendant que vous y êtes évidemment correct, ma question est la raison pour laquelle la convention est de ne pas utiliser un type spécifique, si possible.
  • Oui, une valeur de retour dans le gestionnaire d'événement semble malodorante. Que faire si il n'y a plus d'un gestionnaire?
  • J'ai une discussion détaillée de l'utilisation d'un fort typée "expéditeur" du paramètre. En bref, il n'y a pas d'inconvénients à l'utilisation d'un fort typée, et il est 100% compatible pour C# (toutes les versions) et VB.NET comme de VB 2008. Voir ici: stackoverflow.com/questions/1046016/....
  • 2017 mise à jour du lien vers Microsoft gestionnaire d'événement lignes directrices de conception (qui remplace le Microsoft événement règles de nommage pour l' .NET 1.1).