Utilisation des évènements
|
Un petit tutoriel de création d'un évènement personnalisé, accompagné de petits compléments pratiques sur leur utilisation.
|
|
Vu
3034
fois
|
1. Le Delegate
La première étape consiste à définir l'évènement que l'on souhaite utiliser, avec en particulier le détail de ses paramètres. Cette déclaration s'effectue directement dans le namespace, comme une classe.
public delegate void MonEvenement(object arguments); |
2. La classe émettrice
On définit ensuite la classe qui va émettre l'évènement. Cette classe doit déclarer l'évènement dans ses variables en public (ou internal) pour permettre aux autres classes d'y accéder, et appeler l'évènement ainsi déclaré pour l'émettre.
public class Emettrice() { public event MonEvenement unEvenement; public Emettrice() { } private void Emettre(object parametre) { this.unEvenement(parametre) } } |
3. La classe receptrice
On implémente ensuite la classe qui doit s'abonner sur l'évènement de la classe émettrice. On passe en paramètre une méthode dont la signature est conforme à la définition du Delegate.
public class Receptrice() { private Emettrice emettrice = null; public Receptrice() { this.emettrice = new Emettrice(); this.emettrice.unEvenement += new MonEvenement(this.Traitement); } private void Traitement(object arguments) { // Traitement de l´évènement } } |
4. Compléments
Pour éviter d'abonner plusieurs fois la même méthode sur un évènement, on peut ajouter un désabonnement avant chaque abonnement. Si l'abonnement n'existait pas, cela ne génère pas d'erreur, et il n'est pas nécessaire de conserver l'instance de l'évènement.
this.emettrice.unEvenement -= new MonEvenement(this.Traitement); this.emettrice.unEvenement += new MonEvenement(this.Traitement); |
Si personne ne s'est abonné sur l'évènement, son émission va générer une Exception, il vaut donc mieux controler son existence et émettre ainsi :
private void Emettre(object parametres) { if (this.unEvenement != null) { this.unEvenement(parametres) } } |
Il est possible de récupérer la liste (et donc le nombre) des abonnements d'un évènement à l'aide de la méthode GetInvocationList :
Delegate[] methodes = this.unEvenement.GetInvocationList(); |
Bon code !
|