一.委托的概念
1.委托就是可以用方法名调用另一方法的便捷方法,可以理解为一个”命令”。
2.先来看这段完整代码以及运行结果,,然后再进行分析:
using System;
namespace ConsoleApp1
{
class Program
{
public delegate void MyDelete(string str);//声明一个委托,可以简单地把委托理解为一个”命令”
static void Print1(string str)//定义一个方法Print1
{
Console.WriteLine("Print1:"+str);
}
static void Print2(string str)//定义一个方法Print2
{
Console.WriteLine("Print2:" + str);
}
static void Main()
{
MyDelete myDelete=new MyDelete(Print1); //一旦声明了委托类型,委托对象必须使用 new 关键字来进行实例化
myDelete += Print2;//委托的多播;
myDelete("hello");//该myDelete委托此时调用的是Print1和Print2两个函数,这就是委托的多播(一个委托可以调用多个方法)
Console.ReadLine();
}
}
}
运行结果:
二.委托的声明
1.委托的声明格式:访问修饰符+delegate+返回类型+委托类型名+参数列表,例如上述代码中的:
public delegate void MyDelete(string str);//该委托可被用于引用任何一个带有一个单一的 string 参数的方法,返回类型为空
(1)访问修饰符:c#中,访问修饰符有public、protected、private、internal、protected internal五种。上述代码中,public就是访问修饰符。
(2)delegate代表委托
(3)返回类型:如void、int、float、bool等。上述代码中,void 就是返回类型。
(4)委托类型名:委托类型名是程序员自己定义的名称。上述代码中,MyDelete就是自定义的委托类型名
(5)参数列表:上述代码中,string str就是参数列表,表示该委托接受一个string类型的参数。
2.委托必须先声明后创建
三.委托的实例化
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。例如上述代码中的:
MyDelete myDelete=new MyDelete(Print1); //一旦声明了委托类型,委托对象必须使用 new 关键字来进行实例化
上述代码的意思是,该委托myDelete将用于引用带有一个带string参数的方法Print1
四.委托的多播
1.委托对象可使用 “+” 运算符进行合并,例如上述代码中的:
MyDelete myDelete=new MyDelete(Print1); //一旦声明了委托类型,委托对象必须使用 new 关键字来进行实例化
myDelete += Print2;//委托的多播;
这两行代码的意思是,该委托myDelete不仅将引用带有一个string参数的方法Print1,还将引用带有一个string参数的方法Print2,即一个委托同时引用多个方法,这就可以简单理解为委托的多播,
而代码的运行结果
也表明myDelete(“hello”)这一行代码成功地引用了Print1和Print2两个方法,即实现了委托的多播。