進階系列(8)——匿名方法與lambda表達式

一 匿名方法的介紹
     匿名方法是爲了簡化委託的實現,方便調用委託方法而出現的,同時,匿名方法也是學好lambda表達式的基礎。在委託調用的方法中,若是方法只被調用一次,這個時候咱們就沒有必要建立具名方法,從而用匿名方法更爲方便。
二 匿名方法的使用場景
  1 聲明委託變量時做爲初始化表達式
  2 組合委託時賦值語句的右邊
  3 爲委託增長事件時賦值語句的右邊
三 匿名方法的定義
  匿名方法是在初始化委託時內聯聲明的方法
  Delegate (參數列表){語句塊}
(一)返回值
spa

匿名方法不會顯示聲明返回值。若是委託有void類型的返回值,匿名方法就不能有返回值code

(二)參數
  如下狀況,咱們能夠使圓括號爲空或省略圓括號來簡化匿名方法的參數列表(兩項同時成立)
  1 委託的參數列表不包含任何out參數
  2 匿名方法不使用任何參數
(三)params參數
  若是聲明委託的參數列表包含了params參數,那麼params關鍵字在匿名方法的參數列表中就會被省略
四 匿名方法的變量和參數的做用域
 1 參數以及聲明在匿名方法內部的局部變量的做用域限制在實現方法的主體以內
 2 與委託的具名方法不一樣,匿名方法能夠訪問它們外圍做用域的局部變量和環境,方法中的代碼能夠訪問外圍變量而且輸入它blog

五 lambda表達式簡介

     lambda表達式是比匿名方法更簡潔的一種匿名方法語法。事件

     lambda運算符:全部的lambda表達式都是用新的lambda運算符 " => ",能夠叫它,「轉到」或者 「成爲」。運算符將表達式分爲兩部分,左邊指定輸入參數,右邊是lambda的主體。作用域

  lambda表達式:編譯器

         1.一個參數:param=>exprstring

         2.多個參數:(param-list)=>exprit

   

六 匿名方法轉換爲lambda表達式的步驟

   1 刪除delegate關鍵字編譯

   2 在參數列表和匿名方法主體之間放lambda運算符=>.lambda運算符讀做goes toclass

七 簡化lambda表達式

1 編譯器還能夠從委託的聲明中知道委託參數的類型,所以lambda表達式容許咱們省略類型參數。

   帶有類型的參數列表稱爲顯示類型

   省略類型的參數列表稱爲隱式類型

2 若是隻有一個隱式類型參數,咱們能夠省略周圍的括號

3 lambda表達式容許表達式的主體是語句塊或者表達式。若是語句塊包含了一個返回語句,咱們能夠將語句塊替換爲return關鍵字後的表達式(即 去掉關鍵字return)

八 例子:

namespace 匿名方法和lambad表達式 { delegate int MyDelegate(int x); //聲明一個委託 class Program { public static int Add(int x) //實現委託的方法 { return x + 20; } static void Main(string[] args) { MyDelegate del = delegate (int x){ return x + 20;};//匿名方法 MyDelegate del1 = (int x) =>{ return x + 20; }; //lambad表達式 變形1:去掉delegate關鍵字
MyDelegate del2 = (x) => { return x + 20; }; //lambad表達式 變形2:去掉參數類型
MyDelegate del3 = x => x + 20; //lambad表達式 變形3:去掉參數括號和return關鍵字
Console.WriteLine("兩個數的和爲{0}", del3(20)); Console.ReadLine(); } } }

九 lambda表達式的注意事項

 

相關文章
相關標籤/搜索