Func和Action的用法區別

2021-09-06 13:29:45 字數 3040 閱讀 2057

平時我們如果要用到委託一般都是先宣告乙個委託型別,比如:

private

delegate

string say();

string說明適用於這個委託的方法的返回型別是string型別,委託名say後面沒有引數,說明對應的方法也就沒有傳入引數。

寫乙個適用於該委託的方法:

public

static

string

sayhello()

最後呼叫:

static

void main(string

args)

這裡我們先宣告委託,然後再將方法傳給該委託。有沒有辦法可以不定義委託變數呢?

答案是肯定的,我們可以用func.

func是.net裡面的內建委託,它有很多過載。

func

>:沒有傳入引數,返回型別為tresult的委託。就像我們上面的say委託,就可以用func來替代,呼叫如下:

static

void main(string

args)

怎麼樣,有了func很簡單吧。看一下func別的過載。

func委託:有乙個傳入引數t,返回型別為tresult的委託。如:

//

委託 傳入引數型別為string,方法返回型別為int

func a =count;

//

對應方法

public

int count(string

num)

func委託:有兩個傳入引數:t1t2,返回型別為tresult

類似的還有func(t1, t2, t3, tresult)委託、func(t1, t2, t3, t4, tresult)委託等。用法差不多,都是前面為方法的傳入引數,最後乙個為方法的返回型別。

func也可以與匿名方法一起使用如:

public

static

void

main()

;return i > 0 ?s.split(delimiters, i) : s.split(delimiters);

};string title = "

the scarlet letter";

//use func instance to call extractwords method and display result

foreach (string word in extractmeth(title, 5

)) console.writeline(word);

}

同樣它也可以接lambda 表示式

public

static

void

main()

;func

extract = (s, i) =>i > 0 ?s.split(separators, i) : s.split(separators) ;

string title = "

the scarlet letter";

//use func instance to call extractwords method and display result

foreach (string word in extract(title, 5

)) console.writeline(word);

}

func都是有返回型別的,如果我們的方法沒有返回型別該怎麼辦呢?鐺鐺鐺,這時action就要粉墨登場了。

action委託:沒有傳入引數,也沒有返回型別,即void。如:

static

void main(string

args)

public

static

void

sayhello( )

action 委託:傳入引數為t,沒有返回型別。如:

static

void main(string

args)

public

static

void sayhello(string

word )

action委託:兩個傳入引數,分別為t1t2,沒有返回型別。

action同樣的還有許多其它過載,每個過載用法一樣,只是方法的傳入引數數量不一樣。

其實actionfunc的用法差不多,差別只是乙個有返回型別,乙個沒有返回型別,當然action也可以接匿名方法和lambda表示式。

匿名方法:

static

void main(string

args)

;say(

"hello word");

}

lambda表示式:

static

void main(string

args)

Func和Action委託簡單用法

func和action類是特殊的型別,它們允許你在不必指定自定義委託型別的情況下,去使用委託。在整個.net框架中都可以使用它們。例如,在我們考察平行計算時,你也會看到這兩個類的示例。上面一段文字是官方的一段翻譯。雖然看上去你不太容易能理解是什麼意思。的確委託糅合c 的很多概念在裡面,一時半會要真正...

Action與Func的用法及使用

action與func的區別 action是一種委託型別,但是不具有返回值。可以支援最大16個引數 網上說支援16個 實際測試支援4個。func也是一種委託型別,但是其有返回值。private action action action 用法 private actionaction1 private...

c 中Action和Func委託

泛型acion委託表示引用乙個void返回型別的方法,至多可以傳遞至16個引數型別,沒有泛型的action類可呼叫沒有引數的方法,如 class test static void main string args 泛型func委託表示引用帶返回型別的方法,至多可以傳遞16個引數型別和乙個返回型別,f...