Упомянутая вложенная функция означает, что это может быть как лямбда-функция, так и локальная функция.
Мне любопытно, где расположены захваченные переменные.
Например:
private Func<int> Test(int arg)
{
var x = arg;
return () => x;
}
Локальная переменная x
захватывается возвращаемой лямбда-функцией.
Тогда где же это x
расположено в памяти? Это в стеке или куче памяти?
Если это x
в стеке, любой дальнейший вызов Test
может изменить значение x
, и поведение возвращаемой лямбда-функции может быть неправильно изменено.
Но если будет динамически размещаться в динамической памяти, он больше не будет похож на локальную переменную.
Было ли оно сначала размещено в стеке и передано в кучу сразу после возврата Test
? (Я думаю, не потому, что это звучит как излишняя стоимость некоторых ресурсов, но как это работает, чтобы сделать его доступным для доступа к x
после возврата Test
?)