黑马程序员技术交流社区
标题:
事件是不是一种委托
[打印本页]
作者:
何学强
时间:
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 编辑
还没搞懂,在很多地方看到的说法是:
事件是被简化的针对特殊用途的委托。
但是:
事件是成员而不是类型,委托是类型
,因为事件表现了如下特征:
不能使用对象创建表达式(new)来创建对象。
事件必须声明在类或结构中,和其他成员一样;
不能在一段可执行代码中声明事件。
事件成员被隐式自动初始化为null
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2