“如果局部变量和参数的范围包含匿名方法声明,则该局部变量和参数称为该匿名方法的外部变量或捕获变量。例如,下面代码段中的 n 即是一个外部变量:
与局部变量不同,外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止。对 n 的引用是在创建该委托时捕获的。”
以上MSDN資料庫中的一段文字。其中的n是局部變量,照理說應該是存儲在棧上。但上面說“外部变量的生命周期一直持续到引用该匿名方法的委托符合垃圾回收的条件为止”。照這句話的字面意思,應該是存儲在堆上吧。垃圾回收器不是隻負責堆上的內存回收嗎?
請高手指點!謝謝!~
你说的这个应该是closure,主要是局部变量被提升成实例变量了,前些日子有人发文讲了
http://www.cnblogs.com/foundation/archive/2008/12/11/1352797.html
看一下吧