C# 闭包

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-27 01:29:36

1、解决的问题:

先看例子,

1        private Action CreateFunction()
2         {
3             string str = "I am Andy";
4 
5             return () =>
6                 {
7                     Console.WriteLine(str);
8                 };
9         }
1             Action action = CreateFunction();
2             action();

在委托实例中,访问str,从作用域来看,没问题。从生命周期看,方法执行完后,str就会被释放。理论上讲,访问str会出错。

补充:堆保存对象,栈记录程序执行的过程,方法执行完毕,释放局部对象。

2、为了解决上面的问题,编译器做了手脚,将用到的str保存到委托对象的Target属性中,这样就延长了str的生命周期。

说明:这个Target是方法的拥有者,也就是观察者,Target中只有str属性,没有观察者的其他字段和方法。

转载于:https://www.cnblogs.com/nzbbody/p/3326080.html

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!