新手帮助:C#高级编程(第7版)中弱事件模式的例子的理解

 

参考资料:.Net Framework 类库    http://msdn.microsoft.com/zh-cn/library/hh795167(v=vs.110)

也许你也正在读这本书:《C#高级编程》(第7版),也许读的时候你会对其中的弱事件模式有点疑惑,也许你正在一遍一遍地看书中给出的例子。

这篇文章并不能算是什么真正的技术文章,只是写给C#的初学者们看的,以帮助他们更好得理解弱事件模式。当然也许文中存在某些错误,欢迎在评论中指出,讲得不好,随便吐槽。

至于例子的源代码,书里面有,下载的配套源代码也有,如果真有需要,可以留言。

先说明示例中各个类文件的用途:

1.   CarDealer.cs      这个文件包含了两个类,CarInfoEventArgs 是 EventArgs 的派生类,用来描述事件;CarDealer 定义了一个属性,一个方法,不难知道这个类是用来生成和保存事件的。这里必须弄清楚一点,就是委托 EventHandler 和 EventHandler<TEventArgs> 的实质。他们是委托,将事件和事件处理程序挂接起来,最重要的是执行之后会保存相应的事件数据。

2.   Consumer.cs     类Consumer实现了接口 IWeakEventListener ,也就是说它是事件的监听方。该类中包含了 ReceiveWeakEvent 方法(既然要实行 IWeakEventListener 接口,自然要实现这个接口定义的唯一方法),在这个方法里,需要调用监听方编写的一个或几个方法,以在时间到达时,作出相应的处理。另外必须要说明一点, 在示例的其他地方并没有看到有明确写明调用它,那 ReceiveWeakEvent 方法究竟何时被调用呢?它是自动调用的,书中提到 DeliverEvent () 方法会在侦听器中调用它就是这个意思。

3.   WeakCarInfoEventManager.cs   事件管理方。类 WeakCarInfoEventManager 派生自 WeakEventManager ,其中有 AddListener 和 RemoveListener ,意思很明显,就是添加和移除侦听器,它们并不是重写,因为 WeakEventManager 根本没有定义这两个方法,但有 ProtectedAddListener 和 ProtectedRemoveListener 方法,当然你可以在派生类中重写它们,但一般不会这么做,也不推荐,推荐的方式就是像例子里面那样,AddListener 和 RemoveListener 就是常用的方法名,并且定义成静态方法。由于执行了AddListener 和 RemoveListener ,就会相应地执行 StartListening 和 StopListening ,这个过程是自动的,不需要程序员在某个地方明确调用它们,这也意味着必须重写这两个方法,在方法中,必须为指定的 EventHandler (委托)封装方法。所封装的方法用来传递事件,因此它需要调用 DeliverEvent ,正如例子中的 CarDealer_NewCarInfo 。

好了,到这里基本讲清楚各文件的细节。

下面再次梳理一下整个程序的运行情况,看 Program.cs :

var dealer = new CarDealer(); //得到CarDealer实例dealer,至此尚无输出
var michael = new Consumer("Michael");//得到Consumer实例micheal,至此尚无输出
//dealer.NewCar("Mercedes");//不能写在这儿,但可以自行尝试看输出什么
WeakCarInfoEventManager.AddListener(dealer, michael);//添加侦听器,并开始侦听,至此无输出
dealer.NewCar("Mercedes");//触发事件并作出处理

 

执行 WeakCarInfoEventManager.AddListener(dealer, michael); 所引发的一连串动作:

1.  AddListener   添加侦听器

2.  由AddListener 自动调用 StartListening 开始监听,在StartListening 中相应的 EventHandler 才真正有了封装方法

3.  调用StartListening 中所封装的方法传递事件,也即调用了 DeliverEvent

4.  DeliverEvent 自动调用 Consumer 中的 ReceiveWeakEvent ,于是收到事件,执行相应的动作,即执行 NewCarIsHere

到这儿,你应该对整个Event 处理的过程有清晰的理解了吧。

Ok,祝后续的学习顺利。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值