1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| using System;
public class class1{
// définition d'un prototype de fonction
// accepte 2 entiers en paramètre et rend un entier
public delegate int opération(int n1, int n2);
// deux méthodes d'instance correspondant au prototype
public int ajouter(int n1, int n2){
Console.Out.WriteLine("ajouter("+n1+","+n2+")");
return n1+n2;
}//ajouter
public int soustraire(int n1, int n2){
Console.Out.WriteLine("soustraire("+n1+","+n2+")");
return n1-n2;
}//soustraire
// une méthode statique correspondant au prototype
public static int augmenter(int n1, int n2){
Console.Out.WriteLine("augmenter("+n1+","+n2+")");
return n1+2*n2;
}//augmenter
// programme de test
public static void Main(){
// on définit un objet de type opération pour y enregistrer des fonctions
// on enregistre la fonction statique augmenter
opération op=new opération(class1.augmenter);
// on exécute le délégué
int n=op(4,7);
Console.Out.WriteLine("n="+n);
// création d'un objet c1 de type class1
class1 c1=new class1();
// on enregistre dans le délégué la méthode ajouter de c1
op=new class1.opération(c1.ajouter);
// exécution de l'objet délégué
n=op(2,3);
Console.Out.WriteLine("n="+n);
// on enregistre dans le délégué la méthode soustraire de c1
op=new class1.opération(c1.soustraire);
n=op(2,3);
Console.Out.WriteLine("n="+n);
//enregistrement de deux fonctions dans le délégué
op=new class1.opération(c1.ajouter);
op+=new class1.opération(c1.soustraire);
// exécution de l'objet délégué
op(0,0);
// on retire une fonction du délégué
op-=new opération(c1.soustraire);
// on exécute le délégué
op(1,1);
}//Main
}//classe |
Partager