Je suis assez satisfait de ma compréhension du modèle d'événement .NET. Je pense que je peux mal comprendre une petite nuance du système.
Quand j'ai commencé à mettre des événements dans mes classes, j'utilisais la méthode standard comme ceci:
public event EventHandler<MyEventArgs> MyEvent;
Cela signifiait que tout abonnement à l'événement aurait besoin d'une méthode comme:
void HandleThatEvent(object sender, MyEventArgs args){...}
Ce qui est bien, mais j'ai trouvé que je me soucierais rarement de l'expéditeur, donc cela faisait gonfler beaucoup de signatures de méthode.
Je suis donc passé à déclarer mes propres types de délégués
public delegate void MyEventHandler(SomeClass argument);
Ce qui a réduit l'encombrement, mais m'a laissé un petit problème en ce qui concerne l'écriture des gestionnaires:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
Je devrais donc revenir à la déclaration du délégué et regarder, puis revenir en arrière et les écrire, ou le compiler et attendre d'être informé.
Alors maintenant , à la place, je suis juste en utilisant Action
, Action<T>
ou ce qui convient modèle.
public event Action<SomeClass> MyEvent;
Pour que je puisse survoler l'événement et être informé des paramètres qu'il attend.
Ma question, après tout cela: existe-t-il une meilleure pratique pour déclarer des événements en C #? Dois-je revenir en arrière EventHandler<T>
ou est-ce Action<T>
acceptable?