4个回答
展开全部
委托和事件在.NET Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
事件就是一个特殊的委托,委托和事件就类似于字段和属性的关系,事件是对委托做了一个封装。
参考:http://baike.baidu.com/view/1935199.htm
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
事件就是一个特殊的委托,委托和事件就类似于字段和属性的关系,事件是对委托做了一个封装。
参考:http://baike.baidu.com/view/1935199.htm
展开全部
委托实质上是一个类,是对方法的封装,委托内部有三个重要成员:目标,方法,前一个委托。普通代码里这样调用方法: aBird.Fly(); 封装到委托里,aBird 就是目标,Fly 就是方法。委托可以组成链,“前一个委托”用于支持这种链式结构。 MethodInvoker mi = new MethodInvoker(aBird.Fly); mi(); 这段和上面的 aBird.Fly 是一个效果,但不是直接调用。可以将 mi 传递到其他地方,再进行调用。委托在方法和调用方之间建立了间接性。 事件是基于委托的通信机制。如果一个对象的状态改变了,我们可能希望将这种改变通知给外界。从实现角度看,“通知”其实就是调用接收方的方法。困境在于,我们不知道谁对这些改变有兴趣,有多少人对这些改变有兴趣,所以,我们无法直接调用方法。.net中有两个办法解决这个问题,接口和委托。这两个的含义都是“约定”,目的则是“分离”,换句话说,就是:商量好了,分头行动。接口是对类成员的约定,委托是对参数和返回值的约定。对于简单的通知,接口有些麻烦,委托更好一些,所以,我们将一个委托加到类中,让它保存应该调用的方法。但光秃秃的一个字段有点难看,好像没穿衣服一样。为了让代码更好看,.net 引入了事件的概念。事件本质上是一个方法,事件提供 add, remove,将方法挂到这个委托中,或从此委托中移除。像这样: button1.Click += new EventHandler(button1_Click), 订阅事件, button1.Click -= new EventHandler(button1_Click), 退阅事件, 如果A订阅了B的事件,那么它们之间的引用关系是这样:B引用委托,委托引用A。这就是说,在退阅事件之前,A不会被当作垃圾回收,因为B包含对它的引用。 因此,委托和事件的区别是:委托与类,结构,接口,枚举是一类,而事件属类成员,和属性,方法,字段是一类。不过这种区分意义不大,应付考官而已。写代码的时候,谁会想这么多。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2019-04-26 · 移动学习,职达未来!
环球网校
环球网校成立于2003年,十多年来坚持“以学员为中心、以质量为本、以创新驱动”的经营理念,现已发展成为集考试研究、网络课程、直播课堂、题库、答疑、模考、图书、学员社区等为一体的规模化学习平台
向TA提问
关注
展开全部
23年二级建造师-新考季备考指导课
精编干货 高效通关
¥1元/科
23年一级建造师-备考资料大礼包
备考提速 精华知识点
¥1元/科
2021一级造价师-密训抢分
密训抢分冲刺
¥0元
2021一消名师100节精品课
超值体验,轻松取证
¥0元
2021年中级经济师-强化进阶体验课
知己知彼,三步破局
¥1元
2022年高级经济师-基础重塑课
基础重塑 高效备考
¥0元
2021健康管理师超值教程大礼包
教程课题一站式配齐
¥39元
四级人力资源管理师-备考指导
轻松入门人力资源师
¥0元
查
看
更
多
- 在线客服
-
官方服务
- 官方网站
- 精华资料
- 免费直播课
- 免费领课
- 领优惠券
- 考试日历
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你的问题有些模糊啊,我不知道是问事件还是问委托?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
您可能需要的服务
百度律临官方认证律师咨询
平均3分钟响应
|
问题解决率99%
|
24小时在线
立即免费咨询律师
19474人正在获得一对一解答
成都星星点灯5分钟前提交了问题
厦门蝴蝶飞舞1分钟前提交了问题
长春极地风情4分钟前提交了问题