首页 > 代码库 > 捕获变量

捕获变量

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

捕获变量