Являются ли анонимные методы определенными встроенными? В приведенном ниже примере объект-делегат «d» имеет ссылку на анонимный метод, который обращается к переменной «x», которая определена в методе Fun. Объем «x» должен быть ограничен методом «Fun», но когда мы вызываем MyFun, который вызывает делегат, передаваемый как параметр, и увеличивает значение «x».Являются ли анонимные методы определенными встроенными?
Выходной результат «6», как это происходит? Как значение «x», или на самом деле «переменная x» на самом деле было доступно в анонимном методе?
public delegate void Del();
public void Fun()
{
int x = 5;
Del d = delegate { x++; };
MyFun(d);
Console.WriteLine(x);
}
public static void MyFun(Del d)
{
d();
}
Эрик, это выглядит простым в случае единственной переменной «x». Что бы сгенерировал компилятор, когда мы обращаемся к «x» и некоторому «y» из некоторого объекта «z» внутри анонимного метода? Это может сойти с ума в зависимости от того, сколько переменных и объектов мы получаем в анонимном методе. – Brij
@Brij: Это сайт вопросов и ответов. Мой совет заключается в том, что вы задаете этот вопрос *, и кто-то ответит на него. –
@Brij: И да, он может «сойти с ума», как вы говорите. Все становится особенно сложным, если у вас есть вложенные анонимные функции, которые используют формальные параметры внешних функций в качестве захваченных переменных во внутренних функциях. Это один из самых сложных фрагментов компилятора. –