一、多播委托
1.可绑定多个方法,相当于创建了一个委托组合
2.作何的委托必须是同一个类型
3.委托的组合是给事件用的,普通的委托很少用
4.委托可以直接赋值直接调用,委托的变量可以用+=、-=的方式赋值
class Program
{
static void Main(string[] args)
{
//Greet("李大锤",English);//调用打招呼方法,并把用什么语言打招呼的方法当作参数调用
GreetDelegate greetDelegate;
greetDelegate = Chinese;
greetDelegate += English;
//greetDelegate -= English;
Greet("李大锤",greetDelegate);
Console.ReadLine();
}
//定义一个委托
public delegate void GreetDelegate(string name);
//打招呼方法
public static void Greet(string name,GreetDelegate _GDL)//_GDL就是当前的委托对象
{
_GDL(name);
}
//中文打招呼
public static void Chinese(string name)
{
Console.WriteLine("早上好"+name);
}
//英文打招呼
public static void English(string name)
{
Console.WriteLine("GoodMorning" + name);
}
}
效果:
二、泛型委托
1.Action<T>无返回值:内包含16个重载。
2.Func<T>有返回值:内包含17个重载。
语法:Func<int,int,string> myFc = new Func<int,int,string>(Max);(这里是int)传入的参数、最后一个(这里是string)永远是返回值类型
例:Action<T>
static void Main(string[] args)
{
Action<string> myAc = new Action<string>(Printf);
myAc("哈哈哈,我今天捡到一块钱!");
}
static void Printf(string str)//定义一个方法
{
Console.WriteLine(str);
Console.ReadLine();
}
效果:
Func<T>
static void Main(string[] args)
{
Func<double, double, string> myFc = new Func<double, double, string>(Max);
Action<string> myAc = new Action<string>(Printf);
myAc(myFc(10, 20));
myAc(myFc(10, 10));
myAc(myFc(30, 10));
Console.ReadLine();
}
static void Printf(string str)//定义一个方法
{
Console.WriteLine(str);
}
static string Max(double num1,double num2)
{
if (num1 - num2 > 0)
{
return num1 + "大";
}
else if (num1 == num2)
{
return "相等";
}
else
{
return num2 + "大";
}
}
效果: