C# 闭包

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属性,没有观察者的其他字段和方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值