1. 程式人生 > >C#中委托,匿名函數,lamda表達式復習

C#中委托,匿名函數,lamda表達式復習

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 static
void 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表達式復習