笑谈“委托”与“事件”

这几天学习委托的时候,突然冒出了一个很有趣的想法,写出来与大家分享:

有一天,我饿了,虽然我拥有白菜和猪肉,本来能够做一道美味的白菜炖猪肉,但我却没有把白菜和猪肉做成白菜炖猪肉的方法。这时,我想到了“委托”:

我先声明了一个委托,为了让别人能够知道,我将其声明为public:

public delegate 白菜炖猪肉 cookHandler(白菜 m,猪肉 n);

这样,不管是谁,只要他有能把白菜和猪肉变成白菜炖猪肉的方法,他的这个方法便可以为我所用。正巧我的一个哥们FriendA就有这个方法,于是,他的这个方法成了我的“委托”的实例:

cookHandler c=new cookHandler(FriendA.cook);

于是,在输入白菜和猪肉后,我得到了我想要的白菜炖猪肉:

猪肉炖白菜 tmp;
tmp
=c(白菜,猪肉);

简直太棒了。

可是后来,我发现每次都需要去委托居然很累,还有没有更好的办法呢,比喻说,只要我一饿了,就有某个哥们的某个方法让我得到白菜炖猪肉。一想到这,别说,还真有--那就是:事件。

public event cookHandler  hungryEvent;

反正和FriendA比较熟,这件事就交给他好了:

this.hungryEvent+=new cookHandler(FriendA.cook);
   猪肉炖白菜 tmp;
tmp
=hungryEvent(白菜,猪肉);

原来天底下竟有这么好的事,只要我喊一声“我饿了”,总能得到美味可口的白菜炖猪肉。(现实中要是这样多好啊)

然而好景不久,突然有一天,或许是朋友不再乐意这样无条件为我服务,或许是什么原因,总之,竟然出现了:

this.hungryEvent-=new cookHandler(FriendA.cook);

结果,当我如往常一样喊了一声“我饿了”的时候,不但没得到白菜炖猪肉,还白饿了一顿,差点使得系统崩溃。

从这以后,我变得聪明了:

if (hungryEvent!=null)
{
    白菜炖猪肉 tmp;
    tmp
=hungryEvent(白菜,猪肉);
}

每次在喊“我饿了”以前,我总是先看一下有没有人已经愿意用他的方法做我的委托的实例。怎么样,这下安全了吧?

本文纯属笑谈,如有不当之处,敬请谅解。

posted @ 2005-12-23 20:22  同一片海  阅读(493)  评论(2编辑  收藏  举报