亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

10.C#匿名函數的變量捕獲(五章5.5)

2019-11-17 02:40:21
字體:
來源:轉載
供稿:網友

10.C#匿名函數的變量捕獲(五章5.5)

  首先感謝園友的指定,后續的文章一定會多碼多想,出來的文章才有說服力。那今天接上篇我們來聊一聊匿名函數,對于匿名函數,我們知道使用delegate關鍵字,那我們來需要知道匿名函數在變量是的處理方式,先說兩個術語,外部變量和捕獲的外部變量,可以看出"捕獲的外部變量=外部變量+捕獲了",這個捕獲顧名思義就是在匿名函數中使用了這個變量。

  外部變量:指在一個包含匿名方法的作用域內的變量或者參數,在類的實例成員內部的匿名方法,this也是認為是一個外部變量。

  捕獲的外部變量:它是指在匿名方法中使用的外部變量。

  代碼如下

 1 static void Main(string[] args) 2 { 3     //x和y稱為外部變量 4     int x = 0, y = 1; 5     //在匿名方法中使用到了x,則x稱為捕獲的外部變量 6     Action<int> ac = delegate (int n) { Console.WriteLine(x); }; 7  8     //小結:x、y和匿名方法都在Main函數的作用域內,也可以擴展到類的作用域及命名空間的作用域 9 10     Console.ReadKey();11 }

  再來說下匿名方法捕獲變量的行為,可以看到在匿名方法中我們訪問到了局部變量x,請注意,并不是僅僅訪問到了x的值,而是在匿名類型中使用一個類型實例引用到了變量x,對于x的改變,因為是引用,所以總能使用這個類型實例訪問到,如

1 long x1 = 11, y1 = 12;2 Action<long> ac1 = delegate (long l) { Console.WriteLine(x1); };3 ac1(1L); //打印114 x1 = y1;5 ac1(1L);  //打印12

  參數long l這里沒有使用到,不過這里的參數不是上面所說的外部變量,因為它確實是匿名方法的參數

1 static void Debug(int x) {2     Action<int> a = delegate (int y) { Console.WriteLine(x); };3 }

  上面的x就是術語中說的外部變量,分清定義就應該沒問題了吧。

  關于變量的生存周期,可以就只在一個作用域內,當代碼執行完這個作用域,該作用域內的變量也會被銷毀,但使用匿名方法可以延長變量的生存周期。

 1 static void Main(string[] args) 2 { 3     GetLen gl = GetMethod(); 4     gl("s"); //打印00s 5     gl("s"); //打印0000s 6  7     Console.ReadKey(); 8 } 9 10 public delegate int GetLen(string s);11 static GetLen GetMethod()12 {13     string temp = "0";14     return delegate (string s) {15         temp = String.Concat(temp, temp);16         s = String.Concat(temp, s);17         Console.WriteLine(s);18         return s.Length;19     };20 }

  看出使用GetMethod返回一個委托,這里使用匿名函數(因為匿名函數就是對應簽名的委托),在正常理解下temp在GetMethod作用域內,當離開作用域外,這個變量會銷毀,但說過匿名函數會使用一個類型實例引用這個變量,則這個變量不會銷毀,只有當匿名函數銷毀(也就是委托)才會跟著銷毀,從而延長了變量的作用域,而且對于temp變量的操作也會直接反應在實例引用的變量上,如第一次調用gl("s"),temp="00",第二次調用時,temp="0000"。

   最后說下有點繞的東西,就是變量的實例化在匿名函數中的訪問規則,不過個人感覺這個還真是不很繞,還算是比較好理解的。看下代碼。

 1 GetLen[] a = { }; 2 int xx = 0; 3 for (int i = 0; i < 3; i++) 4 { 5     int xxx = i; 6     a[i] = delegate (string s) { 7         xx++; 8         xxx++; 9         return xx + xxx;10     };11 }

  a是一個委托數組,對于數組中每一個委托都共享一個xx實例引用,而每一個委托都各自擁有一個xxx實例引用(xxx對應不同的委托是不同的),這是因為在循環中,每一次的循環都實例化了xxx,則對于各個委托都有一個全新的xxx實例引用,而xx則是在循環之外實例化的,則每個委托共享一個實例引用。當然在實際的使用過程中,不可能那么簡單,那么要我們開動大腦,好好區別哪一個共享的,哪一個是獨自引用的。

  請斧正。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国模精品视频一区二区| 久久影视免费观看| 自拍偷拍亚洲区| 亚洲女性裸体视频| 亚洲精品久久久久久久久| 麻豆乱码国产一区二区三区| 欧美日韩色婷婷| 91产国在线观看动作片喷水| 81精品国产乱码久久久久久| 97精品在线观看| 亚洲精品xxx| 久久久久免费视频| 丝袜美腿亚洲一区二区| 久久国产精品久久精品| 91精品久久久久久综合乱菊| 亚洲美女精品久久| 久久久精品免费视频| 国产丝袜视频一区| 欧美日韩人人澡狠狠躁视频| 日韩电影第一页| 日韩电影视频免费| 日韩在线中文字| 欧美精品激情在线观看| 欧美久久久精品| 亚洲三级 欧美三级| 国产精品男人的天堂| 亚洲国产精品悠悠久久琪琪| 91精品免费视频| 亚洲福利视频网| 久久手机免费视频| 成人字幕网zmw| 国产精品草莓在线免费观看| 精品国产乱码久久久久酒店| 亚洲国产日韩欧美在线图片| 精品久久中文字幕久久av| 国产精品久久久久秋霞鲁丝| 色七七影院综合| 精品久久在线播放| 亚洲欧美制服另类日韩| 国产精品美女久久久久久免费| 日本精品久久久| 国产一区在线播放| 亚洲自拍在线观看| 久久精品91久久久久久再现| 欧美激情亚洲激情| 中文字幕欧美日韩精品| 欧美黑人巨大xxx极品| 51色欧美片视频在线观看| 日本不卡视频在线播放| 欧美在线性爱视频| 国色天香2019中文字幕在线观看| 日韩免费在线免费观看| 欧美限制级电影在线观看| 成人性生交xxxxx网站| 亚洲天堂2020| 57pao国产精品一区| 日韩精品久久久久久福利| 国产精品99久久久久久www| 欧美国产欧美亚洲国产日韩mv天天看完整| 精品久久香蕉国产线看观看gif| 自拍偷拍免费精品| 国产区亚洲区欧美区| 欧美日韩国产中文精品字幕自在自线| 亚洲综合精品一区二区| 久久99国产综合精品女同| 国产精品高清在线| 欧美亚洲另类激情另类| 精品国产一区二区三区久久久狼| 日韩国产欧美精品一区二区三区| 欧美精品第一页在线播放| 美女av一区二区| 国产精品18久久久久久首页狼| 欧美激情一区二区三区高清视频| 亚洲人成电影在线| 日韩av观看网址| 久久这里只有精品99| 国产日韩在线视频| 最近2019中文字幕mv免费看| 成人看片人aa| 久久久国产91| 欧美日韩激情视频8区| 国产精品亚洲激情| 国产一区二区黑人欧美xxxx| 国产精品免费网站| 中文欧美日本在线资源| 欧美激情精品久久久久久久变态| 亚洲第一网站男人都懂| 日韩av一区在线观看| 亚洲欧美综合v| 欧美资源在线观看| 九色精品美女在线| 91精品国产九九九久久久亚洲| 国产午夜精品视频| 国产精品视频地址| 亚洲午夜性刺激影院| 高清欧美电影在线| 中文字幕国产亚洲| 成人激情黄色网| 日韩电影在线观看永久视频免费网站| 欧美成人第一页| 久久久亚洲影院| 国产精品久久久久久久av大片| 国产一区二区三区久久精品| 久久久久久久亚洲精品| 欧美成人激情在线| 久久精品美女视频网站| 丝袜美腿精品国产二区| 91免费视频国产| 亚洲综合日韩在线| 亚洲一区亚洲二区| 亚洲色图五月天| 亚洲欧美日韩精品久久奇米色影视| 中文字幕日韩在线播放| 久久久久久亚洲精品不卡| 欧美精品一本久久男人的天堂| 欧美一级免费看| 亚洲精品色婷婷福利天堂| 欧美精品亚州精品| 国产一区二区三区精品久久久| 91av在线影院| 欧美色视频日本版| 欧美精品激情视频| 国产激情久久久久| 美女视频久久黄| 精品自拍视频在线观看| 性色av一区二区三区在线观看| 正在播放亚洲1区| 国产精品久久久久久久一区探花| 日韩一区视频在线| 91精品久久久久久久久不口人| 久久久久久久一区二区| 国产精品高精视频免费| 欧美极品少妇全裸体| 在线观看中文字幕亚洲| 欧美日韩国产成人高清视频| 欧美xxxx做受欧美.88| 日韩中文字幕在线看| 国产精品偷伦一区二区| 欧美高清理论片| 91中文字幕一区| 欧美多人爱爱视频网站| 中文字幕精品一区二区精品| 国产精品av免费在线观看| 亚洲国产成人av在线| 97色在线视频观看| 九九热视频这里只有精品| 欧美日韩一区二区三区在线免费观看| 日韩精品中文字幕有码专区| 午夜精品一区二区三区在线播放| 91精品视频免费| 亚洲大胆人体av| 国产在线久久久| 国产精品一区二区久久国产| 国产美女精品视频免费观看| 午夜精品一区二区三区在线播放| 久久99视频免费| 亚洲天堂成人在线视频| www欧美日韩| 91av在线视频观看| 亚洲最大成人免费视频| 欧美日韩国产一中文字不卡| 亚洲男女性事视频| 精品国内产的精品视频在线观看| www.亚洲人.com|