国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

如何創(chuàng)建C#Closure?

2019-11-14 13:35:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  javaScript中一個(gè)重要的概念就是閉包,閉包在Javascript中有大量的應(yīng)用,但是你知道么?C#也可以創(chuàng)建Closure。下面就介紹一下如何在C#中創(chuàng)建神奇的閉包。

  在這之前,我們必須先知道如何在C#中定義函數(shù)

1  //函數(shù)定義,參數(shù)為string,返回為string2 Func<string, string> myFunc = delegate(string msg)3 {4       return "Msg:" + msg;5 };

  利用Lambda表達(dá)式也可以簡(jiǎn)化上述的代碼,但是效果一樣:

1  //Lambda2  Func<string, string> myFuncSame = msg => "Msg:" + msg;

  定義好函數(shù)后,可以進(jìn)行調(diào)用:

1  //函數(shù)調(diào)用2  string message= myFuncSame("Hello world");

  定義一個(gè)帶外部變量(相對(duì)于內(nèi)嵌函數(shù)而言)的嵌套函數(shù),外部函數(shù)將內(nèi)部嵌套的函數(shù)進(jìn)行返回:

 1  public static Func<int, int> Func() 2  { 3      var myVar = 1; 4      Func<int, int> inc = delegate(int var1) 5      { 6          //myVar能夠記錄上一次調(diào)用后的狀態(tài)(值) 7          myVar = myVar + 1; 8          return var1 + myVar; 9      };10      return inc;11  }

  C# Closure調(diào)用如下所示:

1 static void CsharpClosures()2 {3     var inc = Func();4     Console.WriteLine(inc(5));//75     Console.WriteLine(inc(6));//96 }

  當(dāng)?shù)诙握{(diào)用inc(6)時(shí),此時(shí)函數(shù)內(nèi)變量myVar并未像第一次調(diào)用函數(shù)時(shí)進(jìn)行重新初始化(var myVar=1),而是保留了第一次運(yùn)算的值,即 2,因此inc(6)返回的結(jié)果為(2+1+6)=9.


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 翼城县| 磐石市| 青川县| 玛多县| 昌江| 郧西县| 英山县| 鹤岗市| 灵丘县| 兰溪市| 平陆县| 仙游县| 桂平市| 西昌市| 灵山县| 胶州市| 枞阳县| 会泽县| 舟曲县| 安国市| 集安市| 天门市| 南雄市| 平罗县| 民县| 新疆| 奈曼旗| 讷河市| 安福县| 定日县| 喀喇沁旗| 弋阳县| 田东县| 兴安县| 红河县| 太和县| 大港区| 商都县| 无锡市| 当阳市| 柘城县|