• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#闭包

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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人参与评论

请发表评论

全部评论

专题导读
上一篇:
使用C#操作注册表发布时间:2022-07-10
下一篇:
C#编程(七十六)----------使用指针实现基于栈的高性能数组发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap