c#從委託到匿名方法到lambda表達式

委託

委託的概念:

    委託是用戶自定義的類,它定義了方法的類型。儲存的是一系列具有相同參數和返回類型方法的地址列表,調用委託時,此委託列表的所有方法都將被執行。

委託類型的定義:

委託類型必須在被用來創建變量以及類型對象之前聲明。

委託類型的聲明:

1.以delegate關鍵字開頭。

2.返回類型+委託類型名+參數列表

delegate void MyDel(int a)

實例

class Program
    {
        //1、聲明一個委託
        delegate int Mydel(int a, int b);
        static void Main(string[] args)
        {
            //3、定義委託類型變量
            Mydel mydel;
            //4、進行委託綁定
            mydel = new Mydel(add);
            //5、回調綁定的add方法
            int result = mydel(1, 1);
            Console.WriteLine(result);
        }

        //2、創建一個與委託關聯的方法,兩者具有相同的返回值類型和參數列表
        public static int add(int a,int b)
        {
            return a + b;
        }
        
    }

委託之Action< T >不帶返回值的委託類型 
委託之Func< T >帶返回值的委託類型

class Program
    {
        static void Main(string[] args)
        {
            //帶返回值得委託類型
            Func<int, int, int> f = add;
            Console.WriteLine("有返回的結果:{0}",f(1,1));

            //不帶返回值的委託類型
            Action<double, int> a = over;
            a(2, 2);
        }
        //定義一個有返回值的方法 
        public static int add(int a,int b)
        {
            return a + b;
        }
        //定義一個沒有返回值的方法
        public static void over(double a, int b)
        {
            Console.WriteLine("結果爲:" + (a + b));
        }
    }

 

 

 

匿名方法

class Program
    {
        //1、聲明一個委託
        delegate int Mydel(int a, int b);
        static void Main(string[] args)
        {
            //2、定義一個匿名方法
            Mydel m = delegate (int a, int b)
            {
                return a + b;
            };
            //3、調用匿名方法
            int result = m(1, 1);
            Console.WriteLine(result);

            
        }   
    }

 

lambda表達式

class Program
    {
        //1、聲明一個委託
        delegate int Mydel(int a, int b);
        static void Main(string[] args)
        {
            //2、Lambda表達式,大家發現沒有,代碼一個比一個簡潔
            Mydel m = (a, b) => a + b;
            //3、調用方法
            int result = m(1, 1);
            Console.WriteLine(result);

            
        }   
    }
class Program
    {
        //定義一個委託
        public delegate int mydel(int a);
        static void Main(string[] args)
        {
            //調用當前委託
            int result = add(a => 10 + a, 10);
            Console.WriteLine(result);
            Console.WriteLine(add(a=>10-a,11));
        }

        //定義方法,參數爲自定義委託和一個整型,返回值爲自定義委託的返回值
        public static int add(mydel m,int a)
        {
            return m(a);
        }
    }

 

大家有沒有發現,從委託到匿名方法再到lambda表達式,代碼一個比一個簡潔了,Lambda表達式的本質是“匿名方法”,即當編譯我們的程序代碼時,“編譯器”會自動將“Lambda表達式”轉換爲“匿名方法”

Lambda表達式的語法結構:

參數列表=>語句塊

其中的參數列表可以包含多個參數(與委託參數列表一致),0個和1個以上參數需要用括號括起來,例如:

()=>Console.WriteLine("表示有0個參數");

x=>Console.WriteLine("表示有一個參數爲{0}",x);

(x,y)=>Console.WriteLine("表示有兩個參數爲:{0}、{1}",x,y);

 

語句塊中有多條語句需要用大括號括起來,例如:

x=>{x++;return x;}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章