什么是 闭包 ?我们在 .NET 中有它们吗?
如果它们确实存在于 .NET 中,您能否提供一个代码片段(最好是 C#)来解释它?
我有一篇关于这个主题的文章。(它有很多例子。)
本质上,闭包是一个可以在以后执行的代码块,但它维护了它最初创建的环境——即它仍然可以使用创建它的方法的局部变量等,即使在那之后方法已完成执行。
闭包的一般特性是在 C# 中通过匿名方法和 lambda 表达式实现的。
这是一个使用匿名方法的示例:
using System; class Test { static void Main() { Action action = CreateAction(); action(); action(); } static Action CreateAction() { int counter = 0; return delegate { // Yes, it could be done in one statement; // but it is clearer like this. counter++; Console.WriteLine("counter={0}", counter); }; } }
输出:
counter=1 counter=2
在这里我们可以看到 CreateAction 返回的动作仍然可以访问计数器变量,并且确实可以递增它,即使 CreateAction 本身已经完成。