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

C#和VisualBasic中的闭包与对象生存时期,第1张

C#和VisualBasic中的闭包与对象生存时期,第2张

C# 2和即将到来的VB 9都允许开发者在匿名方法中引用局部变量。如果在匿名方法中引用了一个变量,那么这个局部变量将被提升为一个实例变量,并存储在一个名为closure的对象中。提升后,即使创建该变量的方法被执行并退出,该变量也不会消亡。

当所有对匿名函数的引用消失时,闭包变量可以被垃圾收集器正常收集。注意,上一句中的“匿名函数”是复数形式(原文是匿名函数——译者注)——因为同一作用域内的所有匿名函数共用一个闭包。Eric Lippert说,这个问题没有得到足够的重视:

但是,我还没有看到有人提到,同一个作用域内的所有匿名函数共享一个闭包。尽管这种设计在语义和概念上都很容易理解(和实现),但它可能会导致垃圾收集中的潜在问题。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C#和VisualBasic中的闭包与对象生存时期

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情