1. 程式人生 > >委託、匿名委託和lambda表示式

委託、匿名委託和lambda表示式

1、委託

在.NET中,委託有點類似於C/C++中的函式指標,但與指標不同的是,委託是一種安全的型別,那麼我們就以實現兩個數的差為例,先宣告一個成員方法:  

publicint CompareTwoValue(int a, int b){ int c=a-b; return c;}

 再宣告一個委託: 

publicdelegateint deleMethod(int a,int b);

   然後,我們可以通過這個委託呼叫這個上面的成員方法, 注意的一點是方法的引數型別和返回型別必須與委託的引數型別和返回型別相匹配。本例中成員方法和委託都是輸入兩個int值而輸出一個int值。

public
int
Show(){ deleMethod d1 =new deleMethod(CompareTwoValue);//先例項化 return d1(5,10);//再呼叫}

2、匿名委託

也稱作匿名方法,其實,這只是一種語法形式上的變化,因為編譯的時候,還是要進行型別匹配的,那麼對於上面的Show方法,我可以使用匿名委託的方式來表達 

publicint Show1(){ deleMethod d2 =delegate(int a, int b) { int c=a-b; return c; }; return d2(5,10);}

可以看出,語法形式上簡便了,所以我個人覺得匿名委託在C#2.0中並沒有實質性的用處,因為到3.0時,涉及到Lamda表示式時,才真正的有用處。

3、Lambda表示式

用Lamda表示式寫上面的方法:

publicint Show2(){ Func<int, int, int> f = ( a,b) =>{ return a - b; }; return f(5,10);}

Lamda表示式只是匿名委託的一種表現形式。可以很直觀的看出,三種方式中,Lamda表示式編寫的程式碼量最少