Не вижу, как компилятор использует классы, которые он создает для моих замыканий

Я написал эту очень простую программу, чтобы проверить, что компилятор делает за кулисами:

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++;
    };
}
5
задан Christoph 8 November 2011 в 14:59
поделиться