Я был читал эту статью о закрытии, в которой они говорят:
- "вся сантехника автоматическая"
- компилятор "создает класс оболочки" и "продлевает срок службы переменных"
- "вы можете использовать локальные переменные без проблем"
- компилятор .NET заботится о сантехнике для вас и т.д.
Итак, я сделал пример, основанный на их коде и мне, кажется, что закрытие просто действует аналогично обычным именованным методам, которые также "заботятся о локальных переменных без беспокойства" и в которых "вся автоматическая сантехника",
Или какая проблема сделала эту "упаковку локальных переменных", что делает закрытие настолько особенным/интересным/полезным?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
Ответ
Итак, ответ на этот вопрос - читать статью статью Джона Скита о закрытии, о которой указал Марк. Эта статья не только показывает эволюцию, ведущую к лямбда-выражениям на С#, но также показывает, как закрытие рассматривается в Java, отличное чтение для этой темы.