Смотрите кодОбъем переменной внутренней анонимного метода
public class Test
{
public static void Main()
{
Test t = new Test();
var AnonymousMethod = t.OuterMethod();
AnonymousMethod("passedValue");
}
public delegate void SampleDelegate(string InputText);
public SampleDelegate OuterMethod()
{
string outerValue="outerValue";
return (x => {
Console.WriteLine(x);
Console.WriteLine(outerValue);
});
}
}
Выходной
Success time: 0.02 memory: 33816 signal:0
passedValue
outerValue
Ссылка на Example
Обычно объем переменной outerValue
закончится после вызова t.OuterMethod()
. Но в случае использования анонимного типа Консоль четко напечатала вывод (Console.WriteLine(outerValue)
), что означает, что область действия переменной не заканчивается. Что действительно делает компилятор, чтобы определить его область действия? Будет ли он присваивать область применения метода Main
переменным, используемым внутри анонимного метода? Я знаю, как использовать, но не знаю, как это работает. Пожалуйста, направляйте меня?
Редактировать
Пусть анонимный метод, прикрепленный к событию. Событие может быть , выполняющее много позже. Тогда переменная будет в памяти. обряд? Если много назначенных событий, много памяти !. Я думаю, что это плохо. Произошла ли ошибка?
Переменная скомпилирована в закрытие анонимного метода для использования и сохранения. –
@AdamHouldsworth, затем объем закрытия? –
См. Ответ Jon Skeet :-) –