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 !


 

Publié le  09/03/2007
Auteur:  Patrick A

 

Commentaires

Posté le : 15/11/2007 Par : jack84

Merci, Car j'en avais tellement besoin.

Posté le : 15/11/2007 Par : jack84

Merci, Car j'en avais tellement besoin.

Si vous souhaitez ajouter un commentaire vous devez être authentifié.

 

ASP MAGAZINE  ASP-PHP.NET  C²I  CodePPC  CodeS-SourceS  Dotnet-News.com  Tech Head Brothers 

Dotnet-Project.com© tous droits réservés
Webmaster Aleks. Ont collaboré à l'aboutissement de ce projet :
CodeS-SourceS.com, ASP-PHP.Net, DotNet-FR.org, C2i.fr, Newsletter ASP.NET.