action
與func
是.net類庫中增加的內建委託,以便更加簡潔方便的使用委託。最初使用委託時,均需要先定義委託型別,然後定義乙個符合委託型別簽名的函式,在呼叫前,需宣告並建立委託物件,將指定函式與委託進行關聯。
如例1:
public delegate int
math
(int param1,
int param2)
;//定義委託型別
public int
add(
int param1,
int param2)
//定義同簽名函式
math math;
//宣告委託
math=new math
(add)
;//建立委託物件,與指定進行關聯
math(3
,4);
//呼叫委託函式
如果需要三個、四個引數的委託型別,則需要再次定義委託型別。簡單的委託呼叫,卻需要根據簽名不斷改變多次定義委託型別,而微軟推出了對此進行簡化的內建委託型別:action
和func
,簡化了這些不必要的操作。
內建委託型別,顧名思義action
和func
本身就是已經定義好的委託型別。兩種委託型別的區別在於:
action
委託具有 action、action、action……action多達16個的過載,其中傳入引數均採用泛型中的型別引數t,涵蓋了幾乎所有可能存在的無返回值的委託型別。
func
則具有func、func……func17種型別過載,t1……t16為出入引數,tresult為返回型別。
通過對例1的簡單改造:
func<
int,
int,
int> math=add;
//指定委託物件並關聯函式
math(3
,4);
//呼叫委託函式
無需定義直接進行宣告關聯。
既然是委託型別,也同樣可以與匿名函式、或者採用lambda表示式結合使用:
//匿名函式:
func<
int,
int,
int> math=
delegate
(int param1,
int param2)
//lambda:
func<
int,
int,
int> math=
(param1,param2)
=>
action
的使用如同上面func
的使用一樣,只是缺少了返回型別,直接呼叫委託函式。
public void
add(
int param1,
int param2)
遇到此類的委託函式呼叫,那我們就可以直接用action
了:
action<
int,
int> math=add;
math(3
,4);
以上是個人對action
和func
的簡單理解和介紹,**均在文件中手敲進行示意性展示,如果存在問題還請諒解。 c 中Action和Func委託
泛型acion委託表示引用乙個void返回型別的方法,至多可以傳遞至16個引數型別,沒有泛型的action類可呼叫沒有引數的方法,如 class test static void main string args 泛型func委託表示引用帶返回型別的方法,至多可以傳遞16個引數型別和乙個返回型別,f...
C 中的Func委託和Action委託
委託時物件導向的程式語言中新加入的一種特性,在c 中引入委託使得c 程式的編寫更加靈活。c 中可以自己定義各種各樣的委託,但是c 語言也預先為我們定義了兩個做常用的委託,乙個是func乙個是action.函式最基本的特點就是輸入輸出,即輸入引數 執行運算 輸出引數,action是一類沒有輸出引數的委...
C 學習筆記 Func委託與Action委託
學習一項新知識的時候,最好的方法就是去實踐它。clr via c 這本神書真的是太有意思了!好的我的前言就是這個。如果要用有輸入引數,有返回值的委託,那麼func委託將滿足你的要求。func泛型委託引用了乙個帶有乙個返回值的方法,它可以傳遞0或者多到16個引數型別,和乙個返回型別。它可以沒有傳遞引數...