黑马程序员技术交流社区

标题: 事件是不是一种委托 [打印本页]

作者: 何学强    时间: 2012-9-27 17:16
标题: 事件是不是一种委托
事件是不是一种委托
作者: 侍小波    时间: 2012-9-27 18:53
委托是一种在对象里保存方法引用的类型,同时也是一种类型安全的函数指针。
举例:
//声明一个委托,这里的NewDelegate()可以理解为是之后用来取方法的一个类型。
delegate void  NewDelegate();
//下面定义的a,b两种方法,可以理解为NewDelegate这个类型的两个实例。
public void a(){};
public void b(){};
public void main()
{
       NewDelegate dgt1=new NewDelegate(a);
       NewDelegate dgt2=new NewDelegate(b);
  //dgt1指向方法a,dgt2指向方法b。也就是说一个方法的返回值和参数类型数量与声明的委托
//相符时,就可以用一个委托来调用这个方法。而这个方法的名称作为参数传递给实例化的那个委托
}

事件是一种特殊的委托,用反编译工具反编译.net framework即可发现,事件的定义(这里只是举其中一种事件的定义,事件的参数在类库中定义有区别),如下:
public delegate void EventHandler(object sender, EventArgs e);
而常见的各种控件的Click事件是如何定义的呢?
public event EventHandler Click;
说明 Click事件是一个委托
而我们常见的一个Button控件添加一个事件是怎么做的呢?
PageLoad里:Button1.Click+=new EventHandler(Button1_Click);
定义Button1的事件 protected Button1_Click(object sender,EventArgs e){}
如你所见,这是一个很典型的委托调用。
作者: 雷向阳    时间: 2012-9-29 10:54
委托是一种特殊事件,在c++里有指针。在.net里有委托,委托的作用就相当一指针。
事件有sender(发送方),但是事件不知道接受方是谁,这时候就需要委托去指向对应的接收方.
作者: 孙伟明    时间: 2012-10-1 16:15

事件是官方已经预先定好的委托,委托的调用不是用户控制的,,net会自动执行。
自己定义的委托是需要用户控制才会执行的
作者: 刘俊红    时间: 2012-10-5 22:02
本帖最后由 刘俊红 于 2012-10-5 22:03 编辑

还没搞懂,在很多地方看到的说法是:
    事件是被简化的针对特殊用途的委托。

但是:
事件是成员而不是类型,委托是类型,因为事件表现了如下特征:







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2