首页 新闻 会员 周边

委托的匿名方法中,捕獲變量的是存儲在棧(Stack)上還是存儲在堆(Heap)上?

0
[已解决问题] 解决于 2008-12-31 08:13

“如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的外部变量或捕获变量。例如,下面代码段中的 n 即是一个外部变量:

  int n = 0;
  Del d = delegate()
  {
    System.Console.WriteLine("Copy #:{0}", ++n);
  };

与局部变量不同,外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止。对 n 的引用是在创建该委托时捕获的。”

 

以上MSDN資料庫中的一段文字。其中的n是局部變量,照理說應該是存儲在棧上。但上面說“外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止”。照這句話的字面意思,應該是存儲在堆上吧。垃圾回收器不是隻負責堆上的內存回收嗎?

請高手指點!謝謝!~

罗向龙的主页 罗向龙 | 初学一级 | 园豆:200
提问于:2008-12-30 10:29
< >
分享
最佳答案
0

你说的这个应该是closure,主要是局部变量被提升成实例变量了,前些日子有人发文讲了

http://www.cnblogs.com/foundation/archive/2008/12/11/1352797.html

看一下吧

GUO Xingwang | 老鸟四级 |园豆:3885 | 2008-12-30 13:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册