Ho scritto questo programma molto semplice per esaminare ciò che il compilatore sta facendo dietro le quinte:Non riesco a vedere come il compilatore utilizza le classi che crea per le mie chiusure
class Program
{
static void Main(string[] args)
{
var increase = Increase();
Console.WriteLine(increase());
Console.WriteLine(increase());
Console.ReadLine();
}
static Func<int> Increase()
{
int counter = 0;
return() => counter++;
}
}
Ora, quando guardo il codice con Riflettore vedo che il compilatore genera una classe per la mia chiusura così:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
// Fields
public int counter;
// Methods
public int <Increase>b__0()
{
return this.counter++;
}
}
che va bene e mi rendo conto che ha bisogno di fare che per gestire il mio chiusura. Tuttavia, quello che non riesco a vedere è come sta effettivamente usando questa classe. Voglio dire che dovrei essere in grado di trovare il codice che crea un'istanza "<> c__DisplayClass1" da qualche parte, sbaglio?
EDIT
Se clicco sul metodo aumento Sembra che:
private static Func<int> Increase()
{
int counter = 0;
return delegate {
return counter++;
};
}
potresti pubblicare il resto del codice compilato? Soprattutto il tuo metodo principale. – dowhilefor
@dowhilefor: Il metodo Main sarebbe in realtà piuttosto noioso. È solo chiamando un metodo per ottenere un delegato, invocando il delegato un paio di volte e stampando i risultati, quindi chiamando 'Console.ReadLine'. –