日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# LUA 闭包

發布時間:2025/3/18 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# LUA 闭包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C# LUA 閉包

許多語言中有閉包的概念,C#的閉包以lambda表達式表現,可以實現與LUA完全一樣的效果。

//LUA------------------------------------------------
function
test()local i = 0return function () -- 匿名函數i = i + 1return iend endc1 = test()//一般情況下,函數是使用棧來存儲變量i的,出了函數后i會被釋放 c2 = test()//一般情況下,函數是使用棧來存儲變量i的,出了函數后i會被釋放
//出了test()的作用域,再測試test()中的局部變量i是否仍然正常運作
print(c1(), c1) print(c2(), c2) print(c1(), c1) print(c2(), c2) //輸出 1 function: 00C9BA00 1 function: 00C9B780 2 function: 00C9BA00 2 function: 00C9B780 //C#---------------------------------------------------
1
delegate int CN(); 2 static CN test() 3 { 4 int i = 0; 5 CN cn = () => { return i = i + 1; }; 6 7 return cn; 8 } 9 static void Main() 10 { 11 CN c1 = test();//一般情況下,函數是使用棧來存儲變量i的,出了函數后i會被釋放 12 CN c2 = test();//一般情況下,函數是使用棧來存儲變量i的,出了函數后i會被釋放
       //出了test()的作用域,再測試test()中的局部變量i是否仍然正常運作
13 Console.WriteLine(c1()); 14 Console.WriteLine(c2()); 15 Console.WriteLine(c1()); 16 Console.WriteLine(c2()); 17 }
//輸出:
1
1
2
2

可以看到,效果完全一樣,?可見,閉包的原理在C#與LUA中是一樣的,理解這兩種語言的閉包概念的兩篇文章:

Lambda 表達式(C# 編程指南)

Lua中的閉包小結

?

閉包是造成內存泄露的罪魁禍首,在大型游戲項目中LUA造成的內存泄漏有一大部分是由于復雜的腳本邏輯間閉包的相互作用導致資源沒有及時的釋放掉造成的。C#項目也是如此。

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

????

posted on 2016-10-24 17:24 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏

總結

以上是生活随笔為你收集整理的C# LUA 闭包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。