1. 程式人生 > 實用技巧 >委託、匿名方法到lambda表示式

委託、匿名方法到lambda表示式

在專案中我們經常會接觸lambda表示式,操作簡潔明瞭。幫我們省了不少事。面對這麼神奇的一個東西,是不是也應該瞭解瞭解它的本質呢。

今天我們通過一步一步的演變揭開lambda表示式的本質

一.委託

C# 中的委託類似於 C 或 C++ 中函式的指標。委託是存有對某個方法的引用的一種引用型別變數。引用可在執行時被改變。委託的本質也跟類一樣,是使用者自定義的型別。類的定義是通過class關鍵字

,而委託的定義是通過delegate來定義

    class Program
    {
        static void Main(string[] args)
        {
            
//宣告一個AddNum型別的變數a, AddNum a = new AddNum(Add); //建立一個指向Add方法的委託物件 a(2, 3); //呼叫a指向的方法 Console.WriteLine(a); //列印a的型別,a(2,3)加上括號才是呼叫 Console.WriteLine(a(2, 3)); } //宣告一個方法以便委託呼叫,要注意的是方法的簽名要與委託宣告的簽名保持一致 public static int Add(int a,int b) {
return a + b; } } //宣告一個委託,要注意的是委託跟類是同一級別的 delegate int AddNum(int a, int b);

二.匿名方法

匿名方法,顧名思義就是沒有名字的方法,通常我們呼叫方法就是根據方法的名字進行呼叫,那這匿名方法沒有名字我們該如何呼叫嘞。彆著急,我們可以通過匿名方法實現委託例項來進行呼叫

        AddNum c = new AddNum(Add); //傳統的做法,先通過建立Add方法再建立委託例項
            //使用匿名方法建立委託例項
            AddNum b = delegate
(int m, int n) { return m + n; }; Console.WriteLine(b(6,6)); //委託的呼叫還是一樣的

三.lambda表示式

lambda是一個匿名方法,C#中的Lambda 表示式都使用 Lambda運算子=>,該運算子讀為“goes to”

         //匿名方法宣告委託
            AddNum b = delegate (int m, int n){ return m + n; };
            //lambda格式的匿名方法的寫法
            AddNum c = (int m, int n)=>{ return m + n; };

            //演變一:可以省略資料型別(編譯器可以根據委託型別自動推斷)
            AddNum d = (m,n) => { return m + n; };
            //演變二:當匿名方法只用一個引數,小括號也可以省略
            Func<int, bool> e = i => { return true; };   //Func為內建的委託物件,最後一個引數是返回值的型別
            //演變三:若委託有返回值,並且方法體只有一行程式碼,則大括號和return都可以省略
            AddNum f = (m, n) => m + n;