RECHERCHE

Plan du site

BOURSE

 

RUBRIQUES

 
 TUTORIEL TECHNOS .NET 
C# : introduction aux délégués
Proches des pointeurs de fonction, ces classes particulières de la plate-forme .NET permettent d'établir un contrat entre l'émetteur et le récepteur. (16/02/2005)

Présentation
Les délégués (delegates en anglais) sont une des spécificités de C# par rapport à Java : le mot-clé delegate offre la possibilité de créer des classes particulières, appelées "délégations", dont les instances sont nommées "délégués". Ces classes permettent d'établir un contrat entre l'émetteur et le récepteur - en cela, elles sont proches des interfaces, sauf qu'un délégué n'établit son contrat qu'avec une méthode de la classe déléguée.

Que sont-ce, donc, les délégués ? Ils sont définis comme des pointeurs de fonction orientés objet et sans restriction de type (type-safe). Plus simplement, ils sont souvent utilisés comme base de la gestion d'événement au sein de .NET, car ils facilitent l'enregistrement d'un événement. Ils mettent en place un système de rappel (callback) beaucoup plus sécurisé, indiquant à une fonction de référer à une autre. Plus que de simples pointeurs de fonction, ils permettent de préciser le nombre d'arguments à prendre en compte, et le type de chacun, ainsi que le type de valeur retournée et les conventions d'appel.

Les délégués sont des méthodes appelables sans connaissance préalable de l'objet cible. Lors de la création d'un événement, l'émetteur ne peut pas forcément connaître l'objet/la méthode qui va gérer son événement. Les délégués permettent de prendre en charge ce rôle d'intermédiaire. Ils offrent aux développeurs une méthode de dialogue entre objets, en permettant de fournir en paramètre une fonction de même signature pour déléguer l'exécution d'un morceau de code. Les délégués sont ainsi très utilisés au sein de .NET, dans les cas où un composant doit rappeler le composant qui l'utilise.

L'intérêt n'est pas forcément visible : au premier regard, on pourrait comprendre que les délégués permettent d'appeler une fonction à la place d'une autre, ce qui peut laisser sceptique. Les délégués répondent pourtant à un besoin précis : prévoir dans le code d'appeler une méthode, sans savoir lors de la phase de programmation quelle sera cette méthode, celle-ci n'étant précisée que lorsque le programme est lancé. Par exemple, on peut avoir besoin de lancer un tri, mais ne pas être en mesure de déterminer le type de tri (Bulle, Quick, Merge…) avant que l'application ne tourne. L'idée est que ce n'est plus l'objet initial qui gère l'activité, il peut la déléguer à une autre fonction qui prend en charge l'ensemble du processus (c'est la délégation asynchrone).

  Forum

Réagissez dans les forums de JDN Développeurs

En pratique
Au sein du code C#, il faut commencer par établir un type délégation (via le mot-clef delegate), en précisant bien les arguments que la fonction déléguée doit accepter. Il suffit ensuite de créer un objet du type créé, en indiquant la fonction utilisée. Cette fonction est dès lors disponible via le délégué. On peut comparer un délégué à une interface ne déclarant qu'une méthode.

using System;

public class Test {
  delegate void Deleg1();
  delegate string Deleg2(string s);

  static void f1() {
    Console.WriteLine("Appel de f1.");
    }

  static string f2(string s)
    {
    string _s = string.Format("Appel de f2 avec l'argument \"{0}\".", s);
    Console.WriteLine(_s);
    return _s;
    }

  public static void Main()
    {
    Deleg1 d1 = new Deleg1(f1);
    d1;

    Deleg2 d2 = new Deleg2(f2);
    string s = d2("hello");
    }
  }

 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 



Votre avis sur cette publicité


Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages