在.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 這道題目的...