Les délégués en C#
Un délégué est un objet qui fait référence à une méthode ou simplement, c’est une variable de type référence pouvant contenir une référence de méthode. Les délégués en C# sont comme les pointeurs de fonction en C et C++. Il fournit un moyen d’indiquer quelle méthode doit être appelée lorsqu’un événement est déclenché.
Les délégués ont les caractéristiques suivantes:
- Les délégués hérite de la classe System.MulticastDelegate.
- Ils ont une signature et un type de retour. Une fonction ajoutée aux délégués doit être compatible avec cette signature.
- Les délégués peuvent désigner des méthodes statiques ou d’instance.
- Une fois qu’un objet délégué a été créé, il peut invoquer dynamiquement les méthodes vers lesquelles il pointe au moment de l’exécution.
- Les délégués peuvent appeler des méthodes de manière synchrone et asynchrone.
- Les délégués peuvent également être utilisés dans des « méthodes anonymes ».
Déclaration des délégués
Un délégué peut être déclaré à l’aide du mot clé delegate. Une fois qu’un délégué est déclaré, son instance se réfère et appelle les méthodes dont le type de retour et la liste de paramètres correspondent à la déclaration de délégué.
public delegate int MyDelegate (string str);
Ici le délégué peut être utilisé pour référencer toute méthode comportant un seul paramètre de type string et renvoyant une variable de type int.
Instanciation des délégués
Une fois qu’un type de délégué est déclaré, un objet délégué doit être créé avec le mot-clé « new » et doit être associé à une méthode particulière. Lors de la création d’un délégué, l’argument transmis à l’expression « new » est le nom de la méthode, mais sans les arguments.
Exemple :
using System; /* Déclarer le délégué. Ici, le type de retour et le type de paramètre doivent être identique au type de retour et au type de paramètre de la méthode "operation" qui sert du délégué. */ delegate int operation(int n); namespace WayToLearnX { public class DelegateApp { static int n = 4; public static int sum(int p) { n += p; return n; } public static int sub(int q) { n -= q; return n; } public static int getN() { return n; } public static void Main(string[] args) { //créer des instances de délégué operation op1 = new operation(sum); operation op2 = new operation(sub); //appele la méthode sum en utilisant l'objet délégué op1(10); Console.WriteLine("La valeur de N est : {0}", getN()); //appele la méthode sub en utilisant l'objet délégué op2(2); Console.WriteLine("La valeur de N est : {0}", getN()); } } }
La sortie :
La valeur de N est : 14 La valeur de N est : 12
Comme vous pouvez le remarquer dans le code ci-dessus le type de retour et le type de paramètre des méthode « sum » et « sub » sont les mêmes que la méthode « operation » qui sert du délégué.