委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。
委托的声明:
没有返回值,没有参数的委托
public delegate void MyDelegate()
有返回值,有参数的委托:
public delegate string MyDelegate(int i);
通常情况下使用.Net框架定义好的委托,无需自定义委托。
Action:无返回值的泛型委托
Action<int,string> 表示有传入参数int,string无返回值的委托
Action至少0个参数,至多16个参数,无返回值。
实例:
public static void ChineseGreeting(string name)
{
Console.WriteLine("早上好," + name);
}
public static void GreetPeople(string name, Action<string> MarkGreeting)
{
MarkGreeting(name);
}
static void Main(string[] args)
{
GreetPeople("张三", ChineseGreeting);
Console.ReadLine();
}
结果:
Func:有返回值的泛型委托
Func<int> 表示无参,返回值为int的委托
Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void。
实例:
public static string HasReturnMehtodInt(int i)
{
return "我是一个有参数有返回值的方法,参数为:" + i;
}
public static string TestMethod(Func<int, string> func)
{
return func(1);
}
static void Main(string[] args)
{
string str = TestMethod(HasReturnMehtodInt);
Console.WriteLine(str);
Console.ReadLine();
}
结果:
总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。