Ma question est détaillée dans le code suivant - la raison pour laquelle je demande c'est que j'expérimente avec les délégués:L'utilisation d'un délégué Multicast aux fonctions de la chaîne
//create the delegate
delegate int del(int x);
class Program {
static void Main(string[] args) {
Program p;
p = new Program();
del d = p.a;
d += p.b;
d += p.c;
d += p.d;
d += p.e;
Console.WriteLine(d(10)); //<<was hoping it would be 10+2+3+4+5+6
Console.WriteLine("press [enter] to exit");
Console.ReadLine();
}
private int a(int x) { Console.WriteLine("a is called"); return x + 2; }
private int b(int x) { Console.WriteLine("b is called"); return x + 3; }
private int c(int x) { Console.WriteLine("c is called"); return x + 4; }
private int d(int x) { Console.WriteLine("d is called"); return x + 5; }
private int e(int x) { Console.WriteLine("e is called"); return x + 6; }
}
16 est retourné ....
toutes les fonctions feu, les différents messages « est appelé un » etc tous seront imprimés au console
mais seulement le montant est revenu de la dernière fonction e
est retourné - Je suppose dans le bac kground ils sont retournés mais ensuite écrasés?
Afin d'obtenir ce genre de récursion, je pense que vous devriez passer dans le délégué précédent en tant que paramètre. Sinon, vous ajoutez seulement 10 + 6 = 16. –
@DavinTryon Ce n'est pas vraiment récursif. Il n'y a aucune fonction s'appelant elle-même; c'est juste un enchaînement de fonctions. – Servy
@Servy Ah oui, plus comme des fonctions "imbriquées"? Y a-t-il un nom de langage fonctionnel pour cela? –