web-dev-qa-db-fra.com

Custom EventHandler vs EventHandler <EventArgs>

Récemment, je me suis demandé s'il y avait une différence significative entre ce code:

public event EventHandler<MyEventArgs> SomeEvent;

Et celui-là:

public delegate void MyEventHandler(object sender, MyEventArgs e);
public event MyEventHandler SomeEvent;

Ils font tous les deux la même chose et je n'ai pas été en mesure de faire la différence ... Bien que j'ai remarqué que la plupart des classes du .NET Framework utilisent un délégué de gestionnaire d'événements personnalisé pour leurs événements. Y a-t-il une raison spécifique à cela?

63
haiyyu

Tu as raison; ils font la même chose. Ainsi, vous devriez probablement préférer le premier au second car il est plus clair et nécessite moins de dactylographie.

La plupart des classes .NET Framework ont ​​leurs propres délégués de gestionnaire d'événements personnalisés, car elles ont été écrites avant que les génériques (qui autorisaient la syntaxe abrégée) soient introduits dans la version 2.0. Par exemple, presque toutes les bibliothèques WinForms ont été écrites avant les génériques et, à cette époque, cette dernière forme était la manière de faire les choses {only}.

73
Cody Gray

La deuxième façon donne plus de flexibilité et de sécurité. Il y a moins de méthodes avec la signature correspondante => moins de place pour une erreur. Le délégué personnalisé permet de spécifier exactement les paramètres dont vous avez besoin (ou de ne spécifier personne) - pas d'expéditeur + args cargo cult.

0
SerG