我有an article on this very topic个.(它有很多例子.)
从本质上讲,闭包是一个代码块,可以在以后执行,但它可以维护最初创建闭包的环境,即它仍然可以使用创建闭包的方法的局部变量等,即使该方法已完成执行.
闭包的一般特性在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本身已经完成.