闭包的定义
闭包(closure)在很多语言中都存在,在C#中,闭包是由匿名函数来表示的。C#中的闭包也叫做捕获的变量。当一个匿名函数引用了他所在作用域(一般情况下是一个方法)的局部变量时,为了能够顺利的执行匿名函数而不至于包含它的函数执行完之后线程栈弹出导致局部变量消失,会将这个变量的生命周期延长。这时就形成了闭包。闭包利用了匿名函数的一个特性:因为编译器会为匿名函数生成一个类(或结构),所以,提升匿名函数捕获的这个变量的生命周期的方法就是在把这个变量放到这个类中。此外,这个类中定义的方法既是这个匿名函数。
for循环中的闭包陷阱
```
class Program
{
static void Main(string[] args)
{
Action[] actions=new Action[5];
for (int i = 0; i < actions.Length; i++)
{
actions[i] = () => Console.WriteLine(i);
}
foreach (var item in actions)
{
item();
}
Console.ReadKey();
}
}
```