floodpeak.aesthetic

.NET中的自定义事件
floodpeak.aesthetic | Oct 25, 2007 12:08:00 PM

在我们设计具有composition关系的两个类时,会遇到一些棘手的事

包含类一般会有一个数组之类的东东可以找到它的某个被包含类,这自不用说,可反过来就不那么自然了

被包含类是不会天然的带有它的包含类的引用的,当然这个问题可以有多种解决方式

最直观的就是在实例化被包含类时将包含类自己的引用也传给被包含类,比如new XX(me)或new XX(this),可这么做实在不怎么自然,每一个被包含类都不得不有一个属性称为parent云云

另一种方法是将预计被包含类会使用的函数或属性设置为shared或static,这样被包含类自然可以调用到,但这有一个限制条件就是这些函数不可以调用某个实例的变量,这在功能上是很大的损失

那么最好的方式又当如何呢,我认为自定义事件是个不错的主意,在被包含类中声明一系列事件类型,当它需要包含类的某个功能时就释放一个特定的事件,由包含类来捕获事件并在包含类内部完成一些动作,这样比较符合逻辑,也不那么蹩脚。

举个例子,人作为包含类,包含胃这个被包含类,人具有胃的引用,可胃不应当或者说没必要具有人的引用。当胃饿了,它不应当调用人的eat()函数,而应当发出一个信号说:嗨,主人,我饿了。这时人这个包含类handle了这个事件,于是奔赴食堂;如果胃痛了呢,自然是发个消息说我疼了,人也应该有一套响应函数;如果胃痒了呢……

说到.NET中的自定义事件,还是好操作的,然而有一个需要注意的地方:不可以在构造函数中释放事件,如果做了虽然不会引发异常,但是该事件是不会有效的传达的。

 

Tag: 专业 学习 原创

Comment: (no reply)
To post your comment, Please login first.