欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

闭包的总结

程序员文章站 2022-08-31 10:14:30
对闭包的理解 1.对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。 形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。成员变量存储在堆中的对象里面,由垃圾回收器负责回收。 成员变量它 ......

对闭包的理解
1.对于成员变量和局部变量:成员变量就是方法外部,类的内部定义的变量;局部变量就是方法或语句块内部定义的变量。局部变量必须初始化。
形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。成员变量存储在堆中的对象里面,由垃圾回收器负责回收。
成员变量它和对象的生存期相同。而静态成员变量的生存期是整个程序运行期。
局部变量的生存周期与方法的执行期相同。当方法执行到定义局部变量的语句时,局部变量被创建;执行到它所在的作用域的最后一条语句时,局部变量被销毁。
2.在c#中,原来闭包只是编译器玩的花招而已,它仍然没有脱离.net对象生命周期的规则,它将需要修改作用域的变量直接封装到返回的类中变成类的一个属性n,
从而保证了变量的生命周期不会随函数调用结束而结束,因为变量n在这里已经成了返回的类的一个属性了。

解释: 闭包是函数外部能访问函数内部的局部变量,本来局部随着函数的结束而结束(局部变量存在栈内存),闭包的本质是编译完的il,把局部变量变成成员的属性,
也就是类变量(成员变量)。类变量由垃圾回收处理。

参考以下文章
https://www.cnblogs.com/mamanongnong/p/11945161.html
https://www.cnblogs.com/jujusharp/archive/2011/08/04/c-sharp-and-closure.html