C#中委托,匿名函數,lamda表達式復習
阿新 • • 發佈:2017-06-28
cnblogs lsa 實例化 ring 簡單 lis log blog 答案
一、委托
1.就給類比較,類用class聲明,委托用delegate聲明。
2.委托要指向一個真正的方法。
3.委托的簽名,要和指向的方法一樣。
//1.聲明一個委托 public delegate void DelSayHi(string name); public static void SayHiChinese(string name) { Console.WriteLine("你好?" + name); } public staticvoid SayHiEnglish(string name) { Console.WriteLine("Nice to meet you" + name); } static void Main(string[] args) { //2.實例化委托,指向一個方法 DelSayHi del = new DelSayHi(SayHiChinese); //DelSayHi del =SayHiChinese;寫法二//調用 del("張三"); }
這種寫法,可能會有疑問,還不如直接去調用了。且往下邊繼續看。
//1.聲明一個委托 public delegate void DelSayHi(string name); static void Main(string[] args) { //2.指向方法 Test("張三", SayHiChinese); Test("TOM", SayHiEnglish); }public static void Test(string name,DelSayHi del) { //3.調用 del(name); } public static void SayHiChinese(string name) { Console.WriteLine("你好?" + name); } public static void SayHiEnglish(string name) { Console.WriteLine("Nice to meet you" + name); }
這一次,我中間又封裝了一個方法,這次將方法當成一個參數傳到另一個方法裏。記得剛開始接觸委托時,就是成天鼓搗這句話。
二、匿名函數
按上面的寫法,假如說,我只會用到這個方法一次,那麽有沒有更簡潔的寫法。答案是有。
public delegate void DelSayHi(string name); static void Main(string[] args) { DelSayHi del = delegate (string name) //匿名函數 { Console.WriteLine("你好" + name); }; del("張三"); }
這種寫法叫做匿名函數。
三、lamda表達式
其實還有更簡單的寫法
public delegate void DelSayHi(string name); static void Main(string[] args) { DelSayHi del = DelSayHi del = (string name) => { Console.WriteLine("你好" + name); }; //lamada表達式 del("張三"); }
這種寫法就是lamda表達式。
其實匿名函數和lamda都是委托。
C#中委托,匿名函數,lamda表達式復習