黑马程序员技术交流社区
标题:
c#的委托 求解释
[打印本页]
作者:
黄山
时间:
2011-12-25 12:13
标题:
c#的委托 求解释
委托是个类还是个方法呀? 还有人说委托像C/C++的函数指针,有什么区别呢?
作者:
经睿
时间:
2011-12-28 09:55
一、委托(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.一个委托所搭载的方法并不需要属于同一个类,但一个委托所搭载的所有方法必须具有相同的返回类型和参数列表
作者:
傅涌钦
时间:
2011-12-28 18:37
本帖最后由 傅涌钦 于 2011-12-28 18:45 编辑
要谈委托,就要先从事件说:应用程序有基于过程和基于事件的,后者可以同时做多个事件;然而什么是事件呢,首先基于windows应用程序,有菜单按钮等不同选项,这些称为
事件驱动
,当用户请求这些东西时,就产生了
事件
,而处理事件的代码就称为
事件处理程序
;在创建事件时第一步就是要定义事件处理程序的签名,这个签名就称为
委托
,它是产生事件的类的一部分;如:public delegate A( int x ,bool b);__定义处理程序的委托只是创建和处理我们自己的事件的一个步骤.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2