1. 程式人生 > >c#委託(Delegates)--匿名方法,Lambda表示式

c#委託(Delegates)--匿名方法,Lambda表示式

以下通過程式碼對比,委託+方法、匿名方法、Lambda表示式的區別。

一.委託+方法

這裡用上一篇中的例項:

namespace Func  
{  
    public delegate int MyDel(int num);//宣告一個自定義委託  
    class Program  
    {  
        static int Add1(int a)  
        {  
            int b = 10 + a;  
            Console.WriteLine("——Add1———");  
            return b;  
  
        }  
  
        static int Add2(int a)  
        {  
            int b = 10 - a;  
            Console.WriteLine("——Add2———");  
            return b;  
  
        }  
  
        static void Calculate(MyDel ex, int a)  
        {  
            var result = ex(a);  
            Console.WriteLine(result + "\n");  
        }  
  
        static void Main(string[] args)  
        {  
            Calculate(Add1, 1);  
            Calculate(Add2, 10);  
            Console.ReadKey();  
        }  
    }  
}  

一.匿名方法

匿名方法:顧名思義,匿名方法就是沒有名字的一方法,其方法就是花括號裡的執行語句,並且可以不提前宣告返回值型別;

下面例項由匿名方法實現上面的程式碼:

namespace Func  
{  
    public delegate int MyDel(int num);//宣告一個自定義委託  
    class Program  
    {  
        static void Calculate(MyDel ex, int a)  
        {  
            var result = ex(a);  
            Console.WriteLine(result + "\n");  
        }  
  
        static void Main(string[] args)  
        {  
         MyDel add1=delegate(int a){retrun 10+a};
         MyDel add2=delegate(int b){retrun 10-a};
Calculate(add1,10);
            Calculate(add2,10)
            Console.ReadKey();  
        }  
    }  
}  

二.Lamabda表示式

Lamabda表示式其實就是匿名方法再簡化的寫法,從上面語句可以看出,其實再次宣告delegate語句有點多餘,畢竟MyDel在最開始就已經宣告好了,那麼就開始簡化上面的例項

namespace Func  
{ 
public delegate int MyDel(int num);//宣告一個自定義委託 
class Program { static void Calculate(MyDel ex, int a) { var result = ex(a); Console.WriteLine(result + "\n"); } static void Main(string[] args) {
            Calculate(a=>10+a,10);
            Calculate(b=>10-b,10);
            Console.ReadKey();  
        }  
    }  
}  
以上就是匿名方法,Lambda表示式的進化過程