在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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属性,没有观察者的其他字段和方法。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论