1.认识捕获变量
static void Main(string[] args)
{
Action action = CaptureVariable();
action();
}
static Action CaptureVariable()
{
int flag = 0;
Action action = () =>
{
flag++;
Console.WriteLine("flag=" + flag);
};
flag = 100;
action();
return action;
}

可以看出委托实例action内和action外都可以修改flag的值,是同一个flag变量,flag的作用域跟随委托实例action
2.捕获变量实现原理——没有捕获变量
static void Main(string[] args)
{
}
static Action CaptureVariable()
{
int flag = 0;
Action action = () =>
{
Console.WriteLine("");
};
return action;
}

——捕获flag变量
static void Main(string[] args)
{
}
static Action CaptureVariable()
{
int flag = 0;
Action action = () =>
{
Console.WriteLine(flag);
};
return action;
}

如上图,编译时会在当前类内部新建一个类"<>c_DisplayClass0"维护变量flag
原文:http://www.cnblogs.com/doujiaomifan/p/4233526.html