delegate:和枚舉類似既可以定義在類裡面也可以在namespace下。
聲明:public delegate int Entrust(int x, int y);注:創建委托實例時傳入的參數為方法名
class MyMath { public int add(int x, int y) { return x + y; } public int sub(int x, int y) { return x - y; } } 准備使用:Entrust e=new Entrust(MyMath.add);注:靜態方法可以這樣用,否則請先創建MyMath的對象
多播委托:e+=MyMath.sub;注:對於有返回值的方法最好不用多播委托
匿名委托: e += delegate(int x, int y) { return x * y; };
Lambda:e += (x, y) => x / y;注:明天構建
使用:Console.WriteLine(e(8,2));
系統預定義的常用泛型委托:
Func委托:有多種重載,delegate TResult Func<T1,T2,T3,T4,TResult>——Func<string,int> f = delegate(string x) { return 1; };注:泛型的最後一個參數為返回值類型
Action委托:相對於Func委托無返回值Predicate委托:判斷是否符合某標准,只能接受一個參數,參數類型在<>中指定,返回值為bool。Predicate<string> p = delegate(string x) { return true; };
Comparison委托:比較兩個元素,兩個參數類型需一致,參數類型在<>中指定,返回值為int,一般用於排序。Comparison<string> c = delegate(string x, string y) { return 1; };