Les deux lignes de code suivantes sont presque équivalents:
public event Action<EmployeeEventAgs> Leave;
par opposition à:
public event EventHandler<EmployeeEventAgs> Leave;
La différence est dans la signature de la méthode de gestionnaire d'événements. Si vous utilisez la première approche avec l'action, vous pourriez avoir:
public void LeaveHandler(EmployeeEventAgs e) { ... }
et puis ceci:
obj.Leave += LeaveHandler;
Avec la deuxième approche, la signature de l' LeaveHandler
doit être différente:
public void LeaveHandler(object sender, EmployeeEventAgs e) { ... }
Il est très important de remarquer que, dans les deux cas, l' event
mot-clé est présent. Un événement déclaré explicitement comme telles par l' event
mot-clé n'est plus un champ de la classe. Au lieu de cela, il devient une propriété de l'évènement. L'événement propriétés sont semblables à celles des propriétés, sauf qu'ils n'ont pas d' get
ou set
accesseurs. Le compilateur permet de les utiliser uniquement sur le côté gauche d'un +=
et -=
devoirs (ajout ou suppression d'un gestionnaire d'événement). Il n'y a aucun moyen de remplacer le déjà attribué des gestionnaires d'événements, ou d' invoquer l'événement à l'extérieur de la classe qui la déclare .
Si l'événement de mot-clé qui manquait dans les deux exemples, vous pouvez effectuer les opérations suivantes avec pas d'erreur ou d'avertissement:
obj.Leave = LeaveHandler;
qui va effacer toutes les gestionnaires et les remplacer avec de l' LeaveHandler
.
En outre, vous pouvez également effectuer cet appel:
obj.Leave(new EmployeeEventAgs());
Les deux exemples ci-dessus sont considérées comme un anti-modèle, si vous avez l'intention de créer un événement. Un événement doit être invoqué que par le propriétaire de l'objet et ne devrait pas permettre à retrouver à l' élimination des abonnés. L' event
mot-clé est le .NET-programme de construction qui vous permet de coller avec l'utilisation correcte des événements.
Avoir le dessus dans l'esprit, je crois que beaucoup de gens en tenir à l' EventHandler
approche, car il est plus rare d'utiliser un EventHandler
sans event
mot-clé. Les Actions ont une portée plus large d'utilisation, ils ne sont pas aussi naturellement lorsqu'il est utilisé comme événements. Ce dernier est, bien sûr, un avis personnel, que le gestionnaire d'événement approche a sans doute devenu trop câblé dans mes pratiques de codage. Encore, si les actions sont utilisés correctement, il n'est pas un crime de l'utiliser pour des événements.