笑谈“委托”与“事件”
这几天学习委托的时候,突然冒出了一个很有趣的想法,写出来与大家分享:
有一天,我饿了,虽然我拥有白菜和猪肉,本来能够做一道美味的白菜炖猪肉,但我却没有把白菜和猪肉做成白菜炖猪肉的方法。这时,我想到了“委托”:
我先声明了一个委托,为了让别人能够知道,我将其声明为public:
这样,不管是谁,只要他有能把白菜和猪肉变成白菜炖猪肉的方法,他的这个方法便可以为我所用。正巧我的一个哥们FriendA就有这个方法,于是,他的这个方法成了我的“委托”的实例:
于是,在输入白菜和猪肉后,我得到了我想要的白菜炖猪肉:
有一天,我饿了,虽然我拥有白菜和猪肉,本来能够做一道美味的白菜炖猪肉,但我却没有把白菜和猪肉做成白菜炖猪肉的方法。这时,我想到了“委托”:
我先声明了一个委托,为了让别人能够知道,我将其声明为public:
public delegate 白菜炖猪肉 cookHandler(白菜 m,猪肉 n);
这样,不管是谁,只要他有能把白菜和猪肉变成白菜炖猪肉的方法,他的这个方法便可以为我所用。正巧我的一个哥们FriendA就有这个方法,于是,他的这个方法成了我的“委托”的实例:
cookHandler c=new cookHandler(FriendA.cook);
于是,在输入白菜和猪肉后,我得到了我想要的白菜炖猪肉:
猪肉炖白菜 tmp;
tmp=c(白菜,猪肉);
tmp=c(白菜,猪肉);
简直太棒了。
可是后来,我发现每次都需要去委托居然很累,还有没有更好的办法呢,比喻说,只要我一饿了,就有某个哥们的某个方法让我得到白菜炖猪肉。一想到这,别说,还真有--那就是:事件。
public event cookHandler hungryEvent;
反正和FriendA比较熟,这件事就交给他好了:
this.hungryEvent+=new cookHandler(FriendA.cook);
猪肉炖白菜 tmp;
tmp=hungryEvent(白菜,猪肉);
猪肉炖白菜 tmp;
tmp=hungryEvent(白菜,猪肉);
原来天底下竟有这么好的事,只要我喊一声“我饿了”,总能得到美味可口的白菜炖猪肉。(现实中要是这样多好啊)
然而好景不久,突然有一天,或许是朋友不再乐意这样无条件为我服务,或许是什么原因,总之,竟然出现了:
this.hungryEvent-=new cookHandler(FriendA.cook);
结果,当我如往常一样喊了一声“我饿了”的时候,不但没得到白菜炖猪肉,还白饿了一顿,差点使得系统崩溃。
从这以后,我变得聪明了:
if (hungryEvent!=null)
{
白菜炖猪肉 tmp;
tmp=hungryEvent(白菜,猪肉);
}
{
白菜炖猪肉 tmp;
tmp=hungryEvent(白菜,猪肉);
}
每次在喊“我饿了”以前,我总是先看一下有没有人已经愿意用他的方法做我的委托的实例。怎么样,这下安全了吧?
本文纯属笑谈,如有不当之处,敬请谅解。