委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
记录方法的一种类型
定义
delegate+返回值+委托名称+(参数类型 参数名称)
定义委托方法的时候,返回值类型和参数要一样(参数类型,顺序,参数个数)
//定义方法
public void Hello(string msg)
{
Console.WriteLine(msg);
}
//定义委托
delegate void HelloDelegate(string msg);
//初始化委托
HelloDelegate hello=new HelloDelegate(Hello);
//委托调用
hello.Invoke("参数");//hello(); 可以省略Invoke
泛型委托
通用 代码重用
类型改为 T
//定义方法
public static void AddInt(int a,int b)
{
}
public static void AddDouble(double a,double b)
{
}
//定义泛型委托
delegate void AddDelegate<T>(T a,T b);
//初始化泛型委托
AddDelegate<int> addDelegate=new AddDelegate<int>(AddInt)
AddDelegate<double> addDelegate=new AddDelegate<double>(AddDouble)
预定义委托
无返回值
Action
//方法
public static void Show(string a,int num)
{
Console.WriteLine(a);
}
public static void Showthree(int a,int b,int c)
{
Console.WriteLine(a);
}
//两个参数
Action<string,int> action=new Action<string,int>(Show);
//三个参数
Action<int,int,int> action=new Action<int,int,int>(Showthree);
有返回值
Func
//方法
public static string Show2()
{
return"返回值"
}
public static int Show3(int a)
{
return a;
}
//无参数
Func<string> func1=new Func<string>(show2);
//一个参数,最后一个是返回值
Func<int,int> func2=new Func<int,int>(show3);