Head First C# 中文版 图文皆译 第十一章 事件和委托 page511

在一个关于寻宝的故事中,亨利利用内幕消息试图抢先找到金镶玉蟹,但因不慎为所有寻宝者注册了事件监听,导致每个人都能接收到螃蟹逃跑的通知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

金镶玉蟹的案例

其他寻宝者怎么会比亨利更早的找到螃蟹呢?

这个传奇的关键在于寻宝者是怎么搜寻宝物的。但是我们要先看一下亨利在偷来的类关系图里面看到了什么。

在偷来的类关系图里,亨利发现金镶玉蟹在每次有人靠近的时候都会触发RunForCover事件。更好的是事件包含一个NewLocationArgs,它说明螃蟹会跑到哪儿去。但是其他的寻宝者不知道这回事,所以亨利觉得自己可以先找到螃蟹。

亨利是怎么利用他的内幕消息的呢?

亨利在自己的构造器里注册自己的ListenForClues()作为螃蟹的引用的RunForCover的事件处理器。然后派一个手下过去惊动螃蟹,它会逃跑,躲起来,并触发RunForCover事件--这就给了亨利的ListenForClues()方法需要的所有信息。

亨利就这么失败了。他自己注册事件时就不经意的帮别的寻宝者都注册了!这意味着每个人的事件处理器都关联到同一个事件。所以螃蟹逃跑时,每个人都收到通知。但是亨利不知道自己什么时候被调用,要是别人先注册,别人就先得到通知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值