A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一切都好 中级黑马   /  2013-12-27 14:52  /  1402 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 一切都好 于 2013-12-28 11:59 编辑

请高手详细讲解下委托和事件,尤其是事件,最好有容易理解的例子

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

4 个回复

倒序浏览
1. 委托可以把一个方法作为参数代入另一个方法;
2. 委托可以理解为指向一个函数的指针;
3. 委托和事件没有可比性,因为委托是类型,事件是对象;
4. 事件的内部是由委托实现的;
5.因为对于事件来讲,外部只能"注册自己+=。注销自己-=", 外界不可以注销他的注册者,外界不可以主动触发事件,因此如果用Delegate就没法进行上面的控制,因此诞生了事件这种语法。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
委托可以在客户代码中直接调用委托来激发委托指向的函数,而事件不可以,事件的触发只能由服务代码自己触发、也就是说在你的代码里委托你不但可以安排谁是它的调用函数,还可以直接调用它,而事件不能直接调用,只能通过某些操作触发

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
这个貌似Java里面没有,刚切换到.net需要适应
委托可以理解为存储方法地址的字段
事件对委托进行了包装,可以理解为委托所对应的属性
对委托进行包装的目的在于防止委托字段中存储的方法地址被任意更改,提高安全性
回复 使用道具 举报 1 0
今天刚好在看这个,就说说感受。
      委托是一种类型,用来定义方法的签名。使用委托定义某一委托类型,就可以使用该类型实例化对象,在实例化对象时需要构造,就可以使用与委托定义相同签名的方法方法构造,简单点就是把方法明赋值给委托实例,然后就可以使用该实例调用该方法了。期间,还有一些语法要求、注意事项等,可以参考C# 编程指南。
     事件是对委托的封装,就行属性对字段的封装一样,考虑了程序安全性,但是 windows 的消息机制刚好又有些相同的地方,具体我就说不清楚了。

评分

参与人数 1技术分 +1 收起 理由
V_John + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马