.net 3.5引進了Linq,lambda表達式,所以委託的創建變得更加簡單和優雅了。
引入lambda表達式後,就不需要再使用匿名方法了,使得創建委託的方式更加簡單和優雅。 其實如果lambda表達式先引入,那就不會有匿名方法了。
Lambda表達式在C#中的寫法是“arg-list => expr-body”,“=>”符號左邊為表達式的參數列表,右邊是表達式體(body)。參數清單可以包含0到多個參數,參數之間使用逗號分割。
1 namespace DelegateDemo 2 { 3 //声明委托 4 public delegate void MyDel(string arg1, string arg2); 5 6 class Program 7 { 8 static void Main(string[] args) 9 {10 //.net 3.5中的委托11 12 //创建委托,使用lambda表达式代替匿名方法13 MyDel myDel = (string arg1, string arg2) =>14 {15 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));16 };17 18 //调用委托19 myDel("aaa", "bbb");20 21 Console.ReadKey();22 }23 }24 }
#因為編譯器可以從委託宣告中知道委託參數的型別(這個特性叫做型別推演),所以允許我們省略參數類型,所以程式碼簡化成下面這樣。
1 //创建委托,使用lambda表达式代替匿名方法2 MyDel myDel = (arg1, arg2) =>3 {4 Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));5 };
#附註,如果只有一個參數,還可以省略參數型別周圍的圓括號。
因為lambda表達式允許表達式體是語句或語句塊,所以當表達式體只有一個語句時,可以可以語句代替語句塊,繼續簡化。如下程式碼:
1 //创建委托,使用lambda表达式代替匿名方法2 MyDel myDel = (arg1, arg2) => Console.WriteLine(string.Format("arg1:{0},arg2:{1}", arg1, arg2));
##
以上是關於.net 3.5中的委託實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!