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;
}
}