什麼是委託?
簡單來說委託是乙個型別,這個型別可以賦值乙個方法的引用。
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宣告。委託只有乙個規矩,就是輸入輸出一樣就行,那他屬於乙個委託,你可以把它...