一、委托(delegate)
(一)是什么
1.委托也是一个类,简单的说是面向对象的函数指针。
2.委托是函数的封装,代表一“类”函数。这些函数符合一定的签名,即拥有相同的参数列表和返回值类型。
3.委托也可以看成是对函数的抽象,是函数的类。如同把任何人走路这种方法抽象为一个委托,走路的委托代表任何人走路
4.委托声明定义了一个引用类型,它用一组特定的参数以及返回类型来封装方法。
public delegate void Del(string Message);//这个委托封装了所有只有一个string类型参数且返回类型为void的方法
(二)能做什么
对于静态方法,委托对象封装要调用的方法。对于实例方法,委托对象同时封装一个实例和该实例上的一个方法。如果你有一个委托对象和一组适当的参数,则可以用这些参数调用该委托
(三)怎么做
1.首先声明一个委托(在声明类的同一级声明委托),该委托的返回类型和所搭载的方法的返回类型相同,并且传入的参数类型与方法传入的参数类型相同
delegate void EatDelegate(string food);
2.声明一个委托的实例,并完成初始化,传入所搭载的方法名
EatDelegate zs = new EatDelegate(zsEat);
3.调用该委托,并传入该委托所代理的方法的参数,完成委托的调用
zs("西瓜");
4.完整代码
delegate void EatDelegate(string food);
class Program
{
static void Main(string[] args)
{
EatDelegate zs = new EatDelegate(zsEat);
zs("西瓜");
Console.ReadKey();
}
static void zsEat(string food)
{
Console.WriteLine("张三吃{0}", food);
}
}
(四)什么时候用
1.灵活的方法调用
2.用于异步回调
3.多线程编程中使用委托来指定启动一个线程时调用的方法
4.C#中的事件模型,用委托指明处理给定事件的方法
(五)特点
1.一个委托delegate可以搭载多个方法
2.一个委托所搭载的方法并不需要属于同一个类,但一个委托所搭载的所有方法必须具有相同的返回类型和参数列表
|