c#入門-捕獲變量-創(chuàng)新互聯(lián)

局部變量捕獲

局部函數(shù),匿名函數(shù),可以直接在函數(shù)體內(nèi)使用局部變量。
如果作為委托使用,傳遞給別人。可能在別人使用委托的時(shí)候,這些局部變量的作用域就已經(jīng)消失了。

“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)公司的服務(wù)宗旨!把網(wǎng)站當(dāng)作互聯(lián)網(wǎng)產(chǎn)品,產(chǎn)品思維更注重全局思維、需求分析和迭代思維,在網(wǎng)站建設(shè)中就是為了建設(shè)一個(gè)不僅審美在線,而且實(shí)用性極高的網(wǎng)站。創(chuàng)新互聯(lián)對網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作、網(wǎng)站制作、網(wǎng)站開發(fā)、網(wǎng)頁設(shè)計(jì)、網(wǎng)站優(yōu)化、網(wǎng)絡(luò)推廣、探索永無止境。

因此,編譯器會(huì)對這些變量做出特殊的操作,將這些變量封裝在一個(gè)類里面(編譯器自己創(chuàng)建的類)。
在原變量出了作用域后,因?yàn)樵诜庋b類里面還有引用,不會(huì)被清除。
在這里插入圖片描述
在這里插入圖片描述

不可捕獲的變量

引用變量(ref變量,in參數(shù),out參數(shù)),和ref結(jié)構(gòu)不允許被捕獲。
在這里插入圖片描述

引用捕獲

委托捕獲的變量是以引用傳遞的方式使用的。
也就是說,如果使用和捕獲之間修改了捕獲的變量,那么使用時(shí)是修改后的結(jié)果。

Action act =null;

for (int i = 0; i< 10; i++)
{act += () =>Console.WriteLine(i); 
}
act();//輸出結(jié)果全是10

如果希望使用聲明委托當(dāng)時(shí)的值,只需要另外聲明一個(gè)局部變量進(jìn)行復(fù)制操作。
引用類型的復(fù)制可能需要使用深拷貝。

Action act =null;

for (int i = 0; i< 10; i++)
{int j=i;
	act += () =>Console.WriteLine(j); 
}
act();//輸出0到9
附注

foreach循環(huán)和for循環(huán)不同。
foreach循環(huán)是一個(gè)語法糖,在編譯后不會(huì)呈現(xiàn)出foreach循環(huán),而是while循環(huán)。
然后,在foreach循環(huán)中生命的變量,在編譯后,是在while循環(huán)內(nèi)聲明的。
也就是說foreach循環(huán)中捕獲item,不會(huì)出現(xiàn)上述for循環(huán)的問題。

int[] i = {1, 2, 3, 4, 5 };
Action action = null;
foreach (var item in i)
{action += () =>Console.WriteLine(item);
}
action();//確實(shí)是1,2,3,4,5

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

新聞名稱:c#入門-捕獲變量-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://muchs.cn/article46/djejhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、云服務(wù)器自適應(yīng)網(wǎng)站、建站公司網(wǎng)站制作、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)