标签:
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