新手帮助: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,祝后续的学习顺利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值