c#委託(Delegates)--匿名方法,Lambda表示式
阿新 • • 發佈:2018-12-31
以下通過程式碼對比,委託+方法、匿名方法、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表示式的進化過程