La mia domanda è dettagliato nel seguente codice - il motivo che sto chiedendo questo è che sto sperimentando con i delegati:Utilizzo di un delegato multicast alle funzioni catena
//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 viene restituito ....
tutte le funzioni fuoco, come i vari messaggi "una si chiama" ecc tutti vengono stampati al console
ma solo l'importo restituito dall'ultima funzione di e
viene restituito - sto assumendo nel bac kground vengono restituiti ma poi sovrascritti?
Per ottenere questo tipo di ricorsione, penso che si debba passare al delegato precedente come parametro. Altrimenti, stai aggiungendo solo 10 + 6 = 16. –
@DavinTryon Questa non è una vera ricorsione. Non c'è alcuna funzione che si chiama da sola; è solo concatenazione di funzioni. – Servy
@Servy Ah sì, più come funzioni "annidate"? Esiste un nome di linguaggio funzionale per questo? –