C#和VisualBasic中的闭包与对象生存时期

文章作者 100test 发表时间 2007:08:01 12:33:45
来源 100Test.Com百考试题网


C# 2和即将发布的VB 9都允许开发者在匿名方法中引用局部变量。若某匿名方法中引用了某个变量,则该局部变量将被提升为实例变量,并储存于一个叫做闭包(closure)的对象中。提升之后,即使创建该变量的方法执行完毕退出,该变量仍不会消亡。

  当指向该匿名函数的所有引用都消失后,该闭包变量即可正常地被垃圾回收器回收。注意到前一句中的“匿名函数”是复数形式(原文为anonymous functions——译者注)——因为同一个作用域中所有的匿名函数都共享了一个闭包。Eric Lippert说这个问题并没有受到足够的关注:

  不过,对于同一个作用域中所有的匿名函数都共享了一个闭包的做法,我却没有看到任何人提到过这样会存在问题。虽然这样的设计在语义和概念上都比较容易理解(也比较容易实现),但在垃圾收集方面,这样的做法却有可能导致潜在的问题。
src="/ncre2/js/wxgg.js">

相关文章


知己知彼了解VB编写病毒大体方法
VisualBasic常用术语释义
教你如何用VisualBasic编写病毒
递归过程在VB中的应用实例
C#和VisualBasic中的闭包与对象生存时期
用VB实现“一点即填”
二级VB基础教程:9.6报表制作
知己知彼了解VB编写病毒的方法
二级VB基础教程:9.5结构化查询语言
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛