C# 事件和委托的关系,我这么说对不对

我认为事件就是委托的对象event声明的是一个对象delegate声明的是一种类型,而用这种类型声明一个对象之后这个对象其实就是一个event,只不过在使用的方法和权限上... 我认为事件就是委托的对象
event声明的是一个对象
delegate声明的是一种类型,而用这种类型声明一个对象之后
这个对象其实就是一个event,只不过在使用的方法和权限上有些区别
event是一个有约束和规范的delegate对象
展开
 我来答
仙戈雅3n
2017-04-06 · TA获得超过5790个赞
知道大有可为答主
回答量:2398
采纳率:75%
帮助的人:898万
展开全部
似乎不对,当讨论事件与委托的关系,需要从两个方面展开,分别是用户角度和.NET内部底层。
1)用户角度:事件(event)是一个发布者,它起到的作用是通知事件订阅者要进行事件处理。但是事件发布者并不知道它的事件订阅者都有谁?此时,就需要一个中间人,而这个中间人正是委托(delegate)。所以当事件触发时就形成了一种委托机制:
事件发布者==》委托通知==》事件订阅者处理
2).NET内部底层:当用event关键字声明一个事件类型时,编译器在编译时会自动插入两个特殊的方法add_字段名和remove_字段名分别表示向委托链添加方法和移除方法。

个人看法,仅供参考。
更多追问追答
追问
对于第一条
为什么不让这个委托人(对象)亲自发布事件?这样它就不需要委托别人,直接告诉它的订阅者。
因为delegate也是有+=,-=这样的操作的,所以我觉得它也是可以有"订阅者"的
C#的事件机制是否是仅仅为了符合人的思维模式?把事件的发布者和订阅者通过委托这种形式划分的更加鲜明?
追答
微软只所以这样设计,主要考虑到线程安全的,可以避免线程竞争问题,如果你直接使用delegate那么在多线程的模式下将处于不安全的状态。假设,有两个线程T1,T2,当T1线程对某方法从委托链中移除时,此时T2执行了该方法,你说会发生情况?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式