Napisałem ten bardzo prosty programm zbadać co kompilator robi za kulisami:nie widzę, w jaki sposób kompilator używa klas tworzy dla moich zamknięć
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++;
}
}
Teraz, gdy patrzę na kod z reflektor widzę, że kompilator generuje klasy dla mojego zamknięcia tak:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
// Fields
public int counter;
// Methods
public int <Increase>b__0()
{
return this.counter++;
}
}
że jest w porządku i jestem świadomy, że musi to zrobić, aby obsłużyć mój zamknięcia. Jednak nie widzę, jak on faktycznie używa tej klasy. Chodzi mi o to, że powinienem znaleźć kod, który tworzy gdzieś "<> c__DisplayClass1", czy jestem w błędzie?
EDIT
Jeśli kliknę na metodzie wzrost wygląda na to, że:
private static Func<int> Increase()
{
int counter = 0;
return delegate {
return counter++;
};
}
Czy możesz wysłać resztę skompilowanego kodu? Szczególnie twoja główna metoda. – dowhilefor
@dowhilefor: Metoda główna byłaby dość nudna. Po prostu wywołuje metodę uzyskania delegata, kilkakrotnego wywoływania delegata i drukowania wyników, a następnie wywoływania 'Console.ReadLine'. –