對閉包的理解 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