c#2.0的匿名方法允許我們以內聯的方式來實現委託,而c#3.0的lambda表示式允許我們使用一種更加接近人的思維,更加自然的方式來實現類似匿名方法的方式。計算機的發展告訴我們,人們對計算機上的研究都是不斷在趨近於人的思維,而不是計算機的思維,比如我們已開始使用的組合語言,然後出現了高階語言,物件導向的高階語言,等等。如何讓計算機能夠理解普通人的需求,我們程式設計師的作用就是起這種橋接作用,我們要不斷的嘗試讓計算機更好的理解編**員的思想。計算機能理解的抽象層級的提高,我們程式設計師就能更減輕痛苦。看下邊的例子:
list.findall(
delegate(string s)
lambda
list.findall(s=>s.indexof(「abc」)>0);
很明顯,lamdba表示式更加接近人的思維,而不是象內聯方法那樣努力的在讓計算機來理解,而lambda表示式表達的非常的自然,如果我們能以這樣的方式編寫程式,那麼是多麼的舒服。我們上邊的內聯方式有委託,有返回值,都是為計算機寫,而不是趨近於人來思考的東西。
(引數列表)=>表示式或者語句塊
(x,y)=〉x*y
其實編譯器會將lambda表示式在編譯的時候轉化成委託型別。
lambda表示式和委託型別
lambda表示式l可以被轉化為委託型別d,需要滿足:
l和d擁有相同的引數個數。
l的引數型別與d的引數型別相同,主要隱式型別要參與型別辨析。
d的返回型別與l相同,無論l是表示式,還是語句塊。
比如x=〉x*10的委託型別就是 delegate int mydeg(int)
我們有下邊的例子:
表示式myclass.process((x,y)=>x*y)就等同於下邊的一段**:
mydletegate md1=new mydelegate1(***xx);
myclass.process(md1);
public static int bool ***xx(int x,int y)
C 3 0亮點 lambda表示式
c 2.0之前,如果乙個方法或者變數需要使用委託 delegate 時,則之前必須建立乙個命名方法,並在需要委託的位置傳入這個名稱.比如有乙個針對int型別的資料處理,目的是篩選出乙個int陣列中為奇數的元素,或者其它一些滿足條件的元素.public class commom commom類建立了乙...
C 3 0亮點 lambda表示式
c 2.0之前,如果乙個方法或者變數需要使用委託 delegate 時,則之前必須建立乙個命名方法,並在需要委託的位置傳入這個名稱.比如有乙個針對int型別的資料處理,目的是篩選出乙個int陣列中為奇數的元素,或者其它一些滿足條件的元素.public class commom commom類建立了乙...
lambda表示式初體驗
lambda的前提 有乙個介面,並且有且只有乙個抽象方法 1 函式式程式設計思想 考慮要做什麼,而不是怎麼做 2 初體驗 實現 啟動乙個執行緒,控制台輸出,執行緒啟動了。定義乙個類myrunnable實現runnable介面,重寫run方法 建立myrunnable類物件 建立thread類物件,把...