使用Action Func和Lambda表示式

2021-09-08 21:05:32 字數 3328 閱讀 2476

在.net在,我們經常使用委託,委託的作用不必多說,在.net 2.0之前,我們在使用委託之前,得自定義乙個委託型別,再使用這個自定義的委託型別定義乙個委託欄位或變數。.net 2.0給我們帶來了action、func兩個泛型委託,.net3.0給我們帶來了lambda,這一切使得委託的定義和使用變得簡單起來。下面的例子中的委託都使用了lambda表示式。

一.action系列的泛型委託

action系列的委託定義的是沒有返回值(返回值為void)的委託。它有多個版本包括沒有輸入引數,1個輸入引數,2個輸入引數,3個輸入引數,4個輸入引數共5個版本這幾個版本的原型如下:

1.沒有輸入引數返回值為void的委託.

action委託

封裝乙個方法,該方法不採用引數並且不返回值。

可以使用此委託以引數形式傳遞乙個執行某操作的方法,而不用顯式宣告乙個自定義的委託來封裝此方法。該封裝的方法必須與此委託定義的方法簽名相對應。這意味著該方法不得具有引數和返回值。例:

using

system;

using

system.windows.forms;

public

class

name

public

name(

string

name)

public

void

displaytoconsole()

public

void

displaytowindow()

}public

class

actionstudy}

2.有1個輸入引數返回值為void的委託

action泛型委託封裝乙個方法,該方法只採用乙個引數並且不返回值。

可以使用此委託以引數形式傳遞方法,而不用顯式宣告自定義的委託。該方法必須與此

委託定義的方法簽名相對應。也就是說,封裝的方法必須具有乙個通過值傳遞給它的引數,並且不能返回值。例:

using

system;

using

system.windows.forms;

public

class

actionstudy}

下面的示例演示如何使用action(t) 委託來列印

list(t)

物件的內容。在此示例中,使用 print 方法將列表的內容顯示到控制台上。此外,c# 示例還演示如何使用匿名方法將內容顯示到控制台上。

using

system;

using

system.collections.generic;

class

program}

3.有2個輸入引數返回值為void的委託

action封裝乙個方法,該方法具有兩個引數並且不返回值。

可以使用action(t1, t2) 委託以引數形式傳遞方法,而不用顯式宣告自定義的委託。該

方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有兩個均通過值傳遞給它的引數,並且不能返回值。

using

system;

using

system.io;

public

class

actinstudy"n

", s1, s2);

}catch

finally

};else

concat 

=(s1, s2) 

=>

console.writeline(""

n", s1, s2);

concat(message1, message2);}

4.有3個輸入引數返回值為void的委託

action委託,封裝乙個方法,該方法採用三個引數並且不返回值。

可以使用action(t1, t2, t3) 委託以引數形式傳遞方法,而不用顯式宣告自定義的委託。

該方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有三個均通過值傳遞給它的引數,並且不能返回值。

5.有4個輸入引數返回值為void的委託

action委託, 封裝乙個方法,該方法具有四個引數並且不返回值。

可以使用action(t1, t2, t3, t4) 委託以引數形式傳遞方法,而不用顯式宣告自定義的委託。封裝的方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有四個均通過值傳遞給它的引數,並且不能返回值。 二

.func系統的泛型委託

func系列的委託定義的是返回值的委託。它有多個版本包括沒有輸入引數,1個輸入引數,2個輸入引數,3個輸入引數,4個輸入引數共5個版本這幾個版本的原型如下:

1.沒有輸入引數有返回值(返回值不為void)的委託

func封裝乙個不具有引數但卻返回 tresult 引數指定的型別值的方法。

可以使用此委託構造乙個能以引數形式傳遞的方法,而不用顯式宣告自定義的委託。該

方法必須與此委託定義的方法簽名相對應。這意味著封裝的方法不得具有引數,但必須返回值。

2.具有乙個輸入引數有返回值(返回值不為void)的委託

func封裝乙個具有乙個引數並返回 tresult 引數指定的型別值的方法。

可以使用此委託構造乙個能以引數形式傳遞的方法,而不用顯式宣告自定義的委託。該方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有乙個通過值傳遞給它的引數,並且必須返回值。

3.具有二個輸入引數有返回值(返回值不為void)的委託

func封裝乙個具有乙個引數並返回 tresult 引數指定的型別值的方法。

可以使用此委託構造乙個能以引數形式傳遞的方法,而不用顯式宣告自定義的委託。該方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有兩個均通過值傳遞給它的引數,並且必須返回值

4.具有三個輸入引數有返回值(返回值不為void)的委託

func封裝乙個具有三個引數並返回 tresult 引數指定的型別值的方法。

可以使用此委託構造乙個能以引數形式傳遞的方法,而不用顯式宣告自定義的委託。該方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有三個均通過值傳遞給它的引數,並且必須返回值。

5.具有四個輸入引數有返回值(返回值不為void)的委託

func封裝乙個具有四個引數並返回 tresult 引數指定的型別值的方法。

可以使用此委託構造乙個能以引數形式傳遞的方法,而不用顯式宣告自定義的委託。該方法必須與此委託定義的方法簽名相對應。也就是說,封裝的方法必須具有四個均通過值傳遞給它的引數,並且必須返回值。

使用Action Func和Lambda表示式

在.net在,我們經常使用委託,委託的作用不必多說,在.net 2.0之前,我們在使用委託之前,得自定義乙個委託型別,再使用這個自定義的委託型別定義乙個委託欄位或變數。net 2.0給我們帶來了action func兩個泛型委託,net3.0給我們帶來了lambda,這一切使得委託的定義和使用變得簡...

Ubuntu下使用tasksel架建LAMP

本來ubuntu下架建lamp,需要apt安裝很多包,記住那些包的名字是一件非常痛苦的事情,這裡介紹另外乙個簡單方便的方法,使用tasksel安裝lamp套件。先說說什麼是tasksel,它是乙個debian下的安裝任務套件,如果你為了使你的系統完成某一種常規功能,而需要安裝多個軟體包時,我們就可以...

UVa 1400(LA 3938)動態最大連續和

題目鏈結 解題報告 劉汝佳的 訓練指南 裡,我覺得這道題目講的不夠詳細 並且書上貌似有一點印刷錯誤?在網上找了很多題解,不過覺得 寫的很醜。直到我看到了這篇題解,覺得 寫的非常漂亮,就虛心學習了。uva 1400 ray,pass me the dishes 線段樹 miss minor 這道題目的...