平時我們如果要用到委託一般都是先宣告乙個委託型別,比如:
privatestring說明適用於這個委託的方法的返回型別是string型別,委託名say後面沒有引數,說明對應的方法也就沒有傳入引數。delegate
string say();
寫乙個適用於該委託的方法:
public最後呼叫:static
string
sayhello()
static這裡我們先宣告委託,然後再將方法傳給該委託。有沒有辦法可以不定義委託變數呢?void main(string
args)
答案是肯定的,我們可以用func.
func是.net裡面的內建委託,它有很多過載。
func
>:沒有傳入引數,返回型別為tresult的委託。就像我們上面的say委託,就可以用func來替代,呼叫如下:
static怎麼樣,有了func很簡單吧。看一下func別的過載。void main(string
args)
func委託:有乙個傳入引數t,返回型別為tresult的委託。如:
//委託 傳入引數型別為string,方法返回型別為int
func a =count;
//func委託:有兩個傳入引數:t1與t2,返回型別為tresult。對應方法
public
int count(string
num)
類似的還有func(t1, t2, t3, tresult)委託、func(t1, t2, t3, t4, tresult)委託等。用法差不多,都是前面為方法的傳入引數,最後乙個為方法的返回型別。
func也可以與匿名方法一起使用如:
public同樣它也可以接lambda 表示式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);
}
publicfunc都是有返回型別的,如果我們的方法沒有返回型別該怎麼辦呢?鐺鐺鐺,這時action就要粉墨登場了。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);
}
action委託:沒有傳入引數,也沒有返回型別,即void。如:
staticaction 委託:傳入引數為t,沒有返回型別。如:void main(string
args)
public
static
void
sayhello( )
staticaction委託:兩個傳入引數,分別為t1與t2,沒有返回型別。void main(string
args)
public
static
void sayhello(string
word )
action同樣的還有許多其它過載,每個過載用法一樣,只是方法的傳入引數數量不一樣。
其實action與func的用法差不多,差別只是乙個有返回型別,乙個沒有返回型別,當然action也可以接匿名方法和lambda表示式。
匿名方法:
staticlambda表示式:void main(string
args)
;say(
"hello word");
}
staticvoid 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...