四種委托:(自行調(diào)整代碼的位置委煤,這里只寫關(guān)鍵)
1.delegate: (關(guān)鍵字) 參數(shù)、返回值無限制
需要當(dāng)類定義后使用:
delegate int mc(int a, int b);
mc m = new mc(yourMethodName);
2.Func: (泛型類) 必須有返回值
最后一個參數(shù)為返回值棒卷,前面參數(shù)為函數(shù)參數(shù)
int my(string a) {return 0;}
Func<string, int> mc = new Func<string, int>(my);
3.Action: (泛型類) 不能有返回值
各個參數(shù)即為函數(shù)參數(shù)顾孽。沒有參數(shù)時使用Action
而不是Action<>
來定義
void my(string a) {return 0;}
Action<string> mc = new Action<string>(my);
4.Predicate: (泛型類) 返回值必須為bool型
有且只能有一個參數(shù)蜒什。理由為該對象可作Array.Find()等的參數(shù)用以判斷傳遞某個值是否為***。
bool my(int a) {return true;}
Predicate<int> mc = new Predicate<int>(my);
以上委托可直接以同步方法形式調(diào)用:
mc(你的參數(shù));
也可異步調(diào)用:
Func<string, int> mc = new Func<string, int>(my);//定義
IAsyncResult res = mc.BeginInvoke("aaaaaaaaaaaa", null, null);//異步執(zhí)行
//其他代碼
Console.WriteLine(mc.EndInvoke(res));//阻塞當(dāng)前進(jìn)程直到異步結(jié)束
BeginInvoke方法:
返回一個IAsyncResult對象,把這個當(dāng)EndInvoke的參數(shù)即可
最后兩個參數(shù)(前面的參數(shù)對應(yīng)函數(shù)參數(shù)即可):直接打null即可
其中第一個null原本應(yīng)該為AsyncCallback钞瀑,用途是當(dāng)異步方法執(zhí)行完畢時自動調(diào)用方法雕什,不需要時直接寫null即可贷岸。要用:
IAsyncResult res = mc.BeginInvoke("aa", new AsyncCallback(你的函數(shù)名), null);
最后一個參數(shù)不知道,看看評論區(qū)有沒有大佬出沒
EndInvoke方法:
如注釋所寫睁本,同時返回函數(shù)值給你