C# 中的委託是利用方法當作函數的參數,方便不同種類及功能的實現,一般包括有 delegate 、Action 、Func 、Predicate 四種,在這裡僅針對 Action & Func 兩種做介紹,有興趣的話再請各位自行研究其它兩種。
1. Action 可以沒有參數到 16個參數,沒有傳回值,範例如下透過泛型帶入2個參數 p1, p2 委託 ActionFunc 做為委託方法帶入函數 Test 中,根據帶入型別分別顯示出 "Hello World" & 17 的結果出來。
// T1 T2 為泛型參數定義
pubic static void Test<T1, T2>(Action action, T1 p1, T2 p2)
{
action (p1, p2);
}
public static void ActionFunc(string s, string h)
{
MessageBox.Show( s+h);
}
public static void ActionFunc(int s, int h)
{
MessageBox.Show( (s+h).ToString( ));
}
1. Action 可以沒有參數到 16個參數,沒有傳回值,範例如下透過泛型帶入2個參數 p1, p2 委託 ActionFunc 做為委託方法帶入函數 Test 中,根據帶入型別分別顯示出 "Hello World" & 17 的結果出來。
// T1 T2 為泛型參數定義
pubic static void Test<T1, T2>(Action action, T1 p1, T2 p2)
{
action (p1, p2);
}
public static void ActionFunc(string s, string h)
{
MessageBox.Show( s+h);
}
public static void ActionFunc(int s, int h)
{
MessageBox.Show( (s+h).ToString( ));
}
Test<string, string>(ActionFunc, "Hello", " World");
Test<int , int>(ActionFunc, 8, 9);
2. Func 一樣可以沒有參數到 16個參數,但必須有傳回值,範例如下透過泛型帶入2個參數 p1, p2 委託 FuncExample 做為委託方法帶入函數 Test 中,根據帶入型別一樣顯示出 "Hello World" & 17 的結果出來, 而其中須有回傳值設定(見紅字),最後透過 action(p1,p2) 回傳字串顯示 "OK String" & "OK int"。
// T1 T2 為泛型參數定義
pubic static void Test<T1, T2>(Func<T1, T2, string>, T1 p1, T2 p2)
{
string strRes = action(p1, p2);
MessageBox.Show(strRes);
}
public static string FuncExample(string s, string h)
{
MessageBox.Show( s+h);
return "OK String";
}
public static string FuncExample(int s, int h)
{
MessageBox.Show( (s+h).ToString( ));
return "OK int";
}
// T1 T2 為泛型參數定義
pubic static void Test<T1, T2>(Func<T1, T2, string>, T1 p1, T2 p2)
{
string strRes = action(p1, p2);
MessageBox.Show(strRes);
}
public static string FuncExample(string s, string h)
{
MessageBox.Show( s+h);
return "OK String";
}
public static string FuncExample(int s, int h)
{
MessageBox.Show( (s+h).ToString( ));
return "OK int";
}
Test<string, string>(FuncExample, "Hello", " World");
Test<int , int>(ActionFunc, 8, 9);
留言
張貼留言