C 中委託和Lambda表示式

2021-07-10 16:26:55 字數 1630 閱讀 1258

什麼是委託?

簡單來說委託是乙個型別,這個型別可以賦值乙個方法的引用。

delegate return_type delegate_name(parameter_type parameter_name, ...);

1. delegate_name delegate_instance = new delegate_name(method_name);

2.delegate_name delegate_instance = method_name;

第二種方法更簡潔。

1.delegate_instance();

2.delegate_instance.invoke();

acton委託引用了乙個void返回型別的方法,t表示方法引數, 可以傳遞0~16個引數。

action//沒有引數

action//乙個引數

action//兩個引數

action//16個引數

func引用了乙個帶有返回值的方法,可以傳遞0~16個引數型別,和乙個返回型別

func//只有返回型別

func//有乙個引數和返回型別

func//有16個引數和乙個返回型別

之前使用的委託都只包含乙個方法的呼叫,但是委託也可以包含多個方法,這種委託叫做多播委託。使用多播委託就可以按照順序呼叫多個方法,多播委託只能得到呼叫的最後乙個方法的結果,一般把多播委託的返回型別宣告為void。

多播委託包含乙個逐個呼叫的委託集合,如果通過委託呼叫的其中乙個方法丟擲異常,整個迭代就會停止。

多播委託使用 += 給原有委託加上方法,使用-=減去其中包含的方法。

例如:action action = test1;

action += test2;

action -= test1;

action a1 = method1;

a1+=method2;

delegate delegates=a1.getinvocationlist();

foreach(delegate d in delegates)

之前使用委託,都是先定義乙個方法,然後把方法給委託的例項。但還有一種使用委託的方式,不用去定義乙個方法,使用匿名方法。

funcplus = delegate (int a,int b);

int res = plus(233,233);

console.writeline(res);

這裡相當於把引用的方法直接寫在了後面。

匿名方法主要的有點是減少了**量和**複雜度。

從c#3.0開始,可以使用lambda表示式代替匿名方法。只要有委託引數型別的地方就可以使用lambda表示式。

之前匿名方法的例子可以修改為:

funcplus = (a,b)=>;

int res = plus(233,233);

console.writeline(res);

**相比匿名方法更加簡潔。

事件是一種特殊的委託,或者說是受限制的委託,是委託一種特殊應用,只能施加+= 和-=操作符。

事件不允許在類的外部被直接觸發,只能在類的內部適合的時機觸發。委託可以在外部被觸發。

關於C 委託和Lambda表示式

關於c 委託和lambda表示式 1 c 委託和lambda表示式結合定義方法非常方便 在定一次性方法有很好的應用 沒有返回值的委託和lambda表示式結合 普通委託 getproductnoreturn getproductnoreturn a 沒有引數的委託和lambda表示式結合 普通委託 g...

委託 lambda表示式

呼叫委託的的時候,其包含的每乙個方法都會被執行。委託要求,定義的簽名和返回型別必須一致。建立委託需要注意的地方 因為大部分的委託需要重用,而事件不用,所以前者寫在類外邊,後者寫在類裡邊。一般委託寫在類的外邊,並且用public宣告。委託只有乙個規矩,就是輸入輸出一樣就行,那他屬於乙個委託,你可以把它...

委託 lambda表示式

呼叫委託的的時候,其包含的每乙個方法都會被執行。委託要求,定義的簽名和返回型別必須一致。建立委託需要注意的地方 因為大部分的委託需要重用,而事件不用,所以前者寫在類外邊,後者寫在類裡邊。一般委託寫在類的外邊,並且用public宣告。委託只有乙個規矩,就是輸入輸出一樣就行,那他屬於乙個委託,你可以把它...