委托
当要把方法传送给其他方法时,需要使用委托。把方法当做参数传递。
定义委托基本上是定义一个新类,所以可以在定义类的任何相同地方定义委托。
委托的实例包含的方法,必须与委托的参数值、返回值类型相符
语法定义: delegate 返回值类型 委托名称(参数类型 参数名);
如 delegate void Show(int x);
表示委托的实例方法是有1个int参数值并且返回void。
//定义委托 delegate void Show(Test t); static void Main(string[] args) { //使用委托 Test t = new Test(); Show show = new Show(ShowTest); show(t); //错误的例子 与委托的返回值不一样 int x = 1; Show show1 = new Show(ShowTest1); show1(x); //错误的例子 与委托的参数值不一样 Show show2 = new Show(ShowTest2); show1(x); Console.ReadKey(); } static void ShowTest(Test t) { Console.WriteLine(t.X); } static string ShowTest1(Test t) { return t.X.ToString(); } static void ShowTest2(int t) { Console.WriteLine(t); }
delegate string Show(Test t); static void Main(string[] args) { Test t = new Test(); t.X = 1; Show show = new Show(ShowTest); ShowDelagate(show,t); Console.ReadKey(); } static void ShowDelagate(Show action,Test t) { Console.WriteLine(action(t)); } static string ShowTest(Test t) { return t.X.ToString(); }
Action<T>和Func<T>委托
泛型Action<T>委托表示引用一个void返回类型的方法。 因为这个委托类存在不同的变体,所以可以传递至多16种不同的参数类型。没有泛型参数的Action<T>类可调用没有参数的方法
Func<T>允许调用带返回类型的方法。与Action<T>相似,Func<T>也定义了不同的变体,至多也可以传递16个参数类型和一个返回类型。