C 中 Func 與 Action 的理解

2021-10-01 18:35:51 字數 1819 閱讀 7919

actionfunc是.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);

//呼叫委託函式

如果需要三個、四個引數的委託型別,則需要再次定義委託型別。簡單的委託呼叫,卻需要根據簽名不斷改變多次定義委託型別,而微軟推出了對此進行簡化的內建委託型別:actionfunc,簡化了這些不必要的操作。

內建委託型別,顧名思義actionfunc本身就是已經定義好的委託型別。兩種委託型別的區別在於:

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);

以上是個人對actionfunc的簡單理解和介紹,**均在文件中手敲進行示意性展示,如果存在問題還請諒解。

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個引數型別,和乙個返回型別。它可以沒有傳遞引數...