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

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

C#基礎(chǔ)加強篇---委托、Lamada表達(dá)式和事件(中)

2019-11-17 02:30:33
字體:
供稿:網(wǎng)友

C#基礎(chǔ)加強篇---委托、Lamada表達(dá)式和事件(中)

2.Lamada表達(dá)式

C#共有兩種匿名函數(shù):匿名方法和Lamada表達(dá)式。在2.0之前的C#版本中,創(chuàng)建委托的唯一方法是使用命名方法。C#2.0中引入了匿名方法,匿名方法就是沒有名稱的方法。從C#3.0開始,就可以使用一種新語法把實現(xiàn)代碼賦予委托——Lamada表達(dá)式。

在了解Lamada表達(dá)式之前,我們先來了解一下匿名方法。用匿名方法定義委托的語法與之前的沒有區(qū)別,但在實例化時就有了一些區(qū)別。

使用命名方法創(chuàng)建的委托

 1  class PRogram 2     { 3         private delegate void DelSayHi(string name);//定義委托 4         static void Main(string[] args) 5         { 6             Test("張三", SayHelloByChinese); 7             Test("Zhang San", SayHelloByEnglish); 8         } 9         static void Test(string name, DelSayHi del)10         {11             del(name);12         }13         static void SayHelloByEnglish(string name)14         {15             Console.WriteLine("Hello ," + name);16         }17         static void SayHelloByChinese(string name)18         {19             Console.WriteLine("你好," + name);20         }21     }

使用匿名方法創(chuàng)建的委托

 1   class Program 2     { 3         private delegate void DelSayHi(string name);//定義委托 4         static void Main(string[] args) 5         { 6             Test("張三", delegate(string name) 7             { 8                 Console.WriteLine("你好," + name); 9             });10             Test("Zhangsan", delegate(string name)11             {12                 Console.WriteLine("Hello," + name);13             });    14         }15         static void Test(string name, DelSayHi del)16         {17             del(name);18         }  19     }

匿名方法的優(yōu)點是減少了代碼的編寫,不必定義僅由委托調(diào)用的方法。使用匿名方法時,編譯器仍定義了一個方法,該方法只有一個自動指定的名稱,我們不需要知道。使用匿名方法時,我們應(yīng)遵循兩條規(guī)則:一是在匿名方法中不能使用跳轉(zhuǎn)語句(break,goto或continue)跳到該匿名方法的外部,反之,匿名方法外部的跳轉(zhuǎn)語句不能跳到匿名方法的內(nèi)部。二是在匿名方法內(nèi)部不能訪問不安全的代碼,也不能訪問在匿名方法外部使用的ref和out參數(shù),但可以在匿名方法中使用外部定義的其他變量。

好了,我們再來了解Lamada表達(dá)式。。。。

若要創(chuàng)建 Lambda 表達(dá)式,需要在 Lambda 運算符=>左側(cè)指定輸入?yún)?shù)(如果有),然后在另一側(cè)輸入表達(dá)式或語句塊。

示例1:

 1  class Program 2     { 3         delegate int del(int i); 4         static void Main(string[] args) 5         { 6             del myDelegate = x => x * x; 7             int j = myDelegate(5); //j = 25 8             Console.WriteLine(j.ToString()); 9         }10     }

示例2:

nam

示例3:

 1  static void Main(string[] args) 2         { 3             string mid = ",middle part,"; 4  5             Func<string, string> lamada = (string param) =>   6             { 7                 param += mid; 8                 param += " end of string."; 9                 return param;10             };11             Console.WriteLine(lamada("Start of string "));12         }

為了簡便,示例2和3中name和param的類型string也可以省略不寫。只有一個參數(shù),只用寫出參數(shù)名就行了。如果委托使用多個參數(shù),就把參數(shù)名放在括號里。 string mid = ",middle part,";

Func<string,string, string> lamada = (start,end) => { start += mid; end =start+end; return end; }; Console.WriteLine(lamada("Start of string "," end of string."));

還有如果Lamada表達(dá)式只有一條語句,在方法塊內(nèi)就不需要花括號和return語句,此時編譯器會添加一條隱式的return語句。如示例1,它相當(dāng)于 del myDelegate = x =>{ return x * x; };如果在Lamada表達(dá)式的實現(xiàn)代碼中有多條語句,就必須添加花括號和return語句。

有點玩了,先睡覺,事件留到下篇吧。。。。晚安


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 西青区| 岗巴县| 攀枝花市| 大兴区| 阜宁县| 信阳市| 平罗县| 焦作市| 曲松县| 禄劝| 博乐市| 余干县| 龙江县| 杭州市| 湾仔区| 黑河市| 阿城市| 张家界市| 宜君县| 龙门县| 吉安县| 伊吾县| 兴化市| 太仆寺旗| 松溪县| SHOW| 溧水县| 淮南市| 岗巴县| 福贡县| 望奎县| 石狮市| 海晏县| 白玉县| 安宁市| 民权县| 赫章县| 瓮安县| 湘乡市| 乌鲁木齐县| 崇仁县|