RunUO-FR

Forum de support pour RunUO en français.
 
AccueilAccueil  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  Connexion  

Partagez | 
 

 Les Delegates

Aller en bas 
AuteurMessage
Birfhum



Messages : 6
Date d'inscription : 07/09/2008

MessageSujet: Les Delegates   Mar 9 Sep - 3:22

Les delegates

À priori, maîtrisez d'abords les Types, Méthodes (simples), Arguments, Instances.

Les delegates ont deux utilisations: Le passage de méthodes en arguments et les événements(ie le patron Observateur)


Le passage de méthodes en argument.

Un delegate est déclaré comme une méthode abstraite.

public delegate TypeRetour NomDelegate(ArgumentUn arg, [...]);

Voyons tout d'abord que "delegate" remplace le "abstract" qui serait normalement vu. Pour le reste, la formulation est la même que celle d'une méthode normale, mais avec un ";" à la fin, c'est à dire pas de corps entre { }.

Maintenant, toute les classes qui importeront(à l'aide de using) la classe où le delegate a été déclaré pourront profiter de celui-ci. Cependant, l'envoi d'une méthode doit être exécuté d'une certaine manière...
Il faut instancier le delegate comme un nouvel objet.

Code:
NomDelegate del = new NomDelegate(nomMethode);


Dans le but de clarifier tout ceci, mettons l'exemple en application; vous verrez ceci est plus clair.
Code:
public delegate int BaseHandler(int option, object argument);

//Traiter une demande selon l'option paire.
public static int TraiterDemande(int option, BaseHandler methode)
{
   //Envoyer des options différents si c'est paire ou pas
   return methode(((option % 2 == 0)?5:0), null);
}
Ici, la méthode TraiterDemande demande pour arguments un int et un objet de type BaseHandler, notre delegate.

Dans la classe qui apellera ce delegate...
Code:
// Classe simple qui sert à expliquer comment écrire un handler
public int HandlerSpecialiser(int option, object argument)
{
   return option;
}

public void toto()
{
   int total = ClasseEnHaut.TraiterDemande(5, new ClasseEnHaut.BaseHandler(HandlerSpecialiser));
   Console.WriteLine(total);
}

Ici, on appelle TraiterDemande, en fournissant pour argument une nouvelle instance de BaseHandler qui elle même prend pour argument la méthode HandlerSpecialiser.


Ce type de delegate est donc l'envoie par argument de la méthode à employer. Voic un exemple où je l'ai employé:

Pour une interraction de base de donnée, j'envois une requête vers la base de données puis reçoit les données. Après le traitement de ces dernières, je ferme la connection. Je veux que la méthode soit assez généraliste pour satisfaire tout type de requête(get, set, update, delete).
Je crée donc ma connection et envoie ma requête. Après avoir obtenu les données de la requête, j'apelle mon delegate pour qu'il traite ses dernières(changer leur format, les stocker ou autre). Après ce traitement, je ferme ma connection.


Les événements

Les delegates, comme vous l'avez vu, permettent de voir des méthodes en tant que simples variables... Alors, suivant cette idée, pouvons-nous additionner des méthodes et quel en sera les résultats?

Il est possible d'avoir un objet de type delegate qui possèdera plusieurs autres delegate concrêts. Il faut d'abords créer la variable comme suit.

Code:
public delegate int BaseHandler(object argument);
public BaseHandler operationHandler = null;

Ensuite l'ajout de méthodes dans ce delegate est très facile, il suffit de faire un += de la méthode. Il est aussi possible de retirer les delegates avec un -=.
Code:
operationHandler += new BaseHandler(MethodeValide);
operationHandler(null);


Ces opérations semblent complexe, mais c'est très simple et très très pratique. Plutôt que de vous écrire un exemple, je vous réfère vers le patron de conception Observateur, où les méthodes recevant les listeners sont une application concrète des delegate. Si ceci n'est pas assez clair, je donnerai un exemple concrêt ici.


Dernière édition par Birfhum le Mar 9 Sep - 21:04, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Gargouille



Messages : 97
Date d'inscription : 02/09/2008

MessageSujet: Re: Les Delegates   Mar 9 Sep - 7:26

Merci. Wink

J'ai rajouté deux lignes en italique, à toi de voir. Et aussi, pourrais-tu détailler encore le premier exemple, comment ça fonctionne, à quoi ça sert. J'ai bien du mal avec cette notion Embarassed
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Gargouille



Messages : 97
Date d'inscription : 02/09/2008

MessageSujet: Re: Les Delegates   Dim 5 Oct - 22:01

Hop, un lien vers le site Developpez.com, sur un article de Messieurs Frédéric Cantenot et Olivier Delmotte.

Par ici
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
tresorunikin



Messages : 3
Date d'inscription : 17/01/2009

MessageSujet: Re: Les Delegates   Sam 17 Jan - 2:59

Merci pour les delegates. Mais je ne sais pas réellement leur importance a part celui d'encombrer nos sources. en plus ils ressemblent aux fameux pointeurs C++
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Les Delegates   

Revenir en haut Aller en bas
 
Les Delegates
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RunUO-FR :: Tutoriaux Scripts :: Tutoriaux C#-
Sauter vers: