Я написал эту очень простую программу, чтобы проверить, что компилятор делает за кулисами:
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++;
}
}
Теперь, когда я смотрю на код с помощью Reflector, я действительно вижу, что компилятор генерирует класс для моего закрытия, например что:
[CompilerGenerated]
private sealed class <>c__DisplayClass1
{
// Fields
public int counter;
// Methods
public int <Increase>b__0()
{
return this.counter++;
}
}
Это нормально, и я знаю, что ему нужно это сделать, чтобы справиться с моим закрытием. Однако я не могу понять, как он на самом деле использует этот класс. Я имею в виду, что я смогу найти где-нибудь код, который создает экземпляр "<> c__DisplayClass1", я ошибаюсь?
РЕДАКТИРОВАТЬ
Если я нажму на метод увеличения, это будет выглядеть так:
private static Func<int> Increase()
{
int counter = 0;
return delegate {
return counter++;
};
}