Les délégués

Contenu du snippet

Cet exemple montre comment "pointer" sur des fonctions avec les délégués.
Les délégués permettent de pointer plusieurs fonctions, ce qui permet d'utiliser un seul délégué pour lancer plusieurs fonctions.

Source / Exemple :


using System;

/*

    • Ces délégué sont déclarés en dehors de toutes classes,
    • ils peuvent pourtant être déclarés dans une classe.
  • /
delegate void Délégué(); //Ce délégué ne peut pointer que sur des fonctions sans arguments //et retournants void. delegate int Délégué2(int a,bool b); //Paramètres (int et bool), retourne int. class ClassePrincipale { public static void Main() { Délégué test=new Délégué(Classe1.Fonction1); //création d'un délégué de type Délégué //on le fait pointer sur "void Fonction1()" de Classe1. Délégué2 test2=new Délégué2(Classe2.Fonction4); //création d'un délégué de type Délégué2. //on le fait pointer sur "int Fonction4(int,bool)" de Classe2. Classe2 c2=new Classe2(); /*
    • L'opérateur += est utilisé pour ajouter une fonction
    • au poiteur (délégué).
    • Si on utilise l'opérateur =, la fonction d'avant est
    • perdue.
  • /
test+=new Délégué(c2.Fonction3); //ajout d'une fonction. test+=new Délégué(Classe1.Fonction2); //ajout d'une fonction. test(); //appel de la ou les fonction(s) référencées. Console.Out.WriteLine(); test-=new Délégué(c2.Fonction3); //Le délégué ne pointe plus sur //la fonction Classe2.Fonction3(). test(); Console.Out.WriteLine(); test=null; //Le délégué ne pointe plus sur aucune fonction. test=new Délégué(c2.Fonction3); test(); Console.Out.WriteLine(); int a=test2(456,true); Console.Out.WriteLine(a); } } class Classe1 : Object { private Classe1() //Classe non instanciable. { } public static void Fonction1() { Console.Out.WriteLine("Fonction 1"); } public static void Fonction2() { Console.Out.WriteLine("Fonction 2"); } } class Classe2 { public void Fonction3() { Console.Out.WriteLine("Fonction 3"); } public static int Fonction4(int a,bool b) { Console.Out.WriteLine("int : " + a); Console.Out.WriteLine("bool : " + b); return a; } }

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.