Я написал эту очень простую программу, чтобы изучить, что делает компилятор за кулисами:
class Program
{
static void Main(string[] args)
{
var increase = Increase();
Console.WriteLine(increase());
Console.WriteLine(increase());
Console.ReadLine();
}
static Func Increase()
{
int counter = 0;
return () => counter++;
}
}
Теперь, когда я смотрю на код с помощью Reflector, я вижу, что компилятор генерирует класс для моего замыкания следующим образом:
[CompilerGenerated]
private sealed class c__DisplayClass1
{
// Fields
public int counter;
// Methods
public int b__0()
{
return this.counter++;
}
}
Это нормально, и я знаю, что ему нужно сделать это, чтобы справиться с моим закрытием. Однако я не вижу, как он на самом деле использует этот класс. Я имею в виду, что я должен где-то найти код, который создает экземпляр "c__DisplayClass1", я ошибаюсь?
EDIT
Если я нажму на метод увеличения, это будет выглядеть так:
private static Func Increase()
{
int counter = 0;
return delegate {
return counter++;
};
}
Подробнее здесь: https://stackoverflow.com/questions/805 ... y-closures
Не могу понять, как компилятор использует созданные им классы для моих замыканий. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение