zoukankan      html  css  js  c++  java
  • 笑谈“委托”与“事件”

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

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

    我先声明了一个委托,为了让别人能够知道,我将其声明为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(白菜,猪肉);
    }

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

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

  • 相关阅读:
    查询linux服务器有哪些IP在连接
    GitLab的使用
    jenkins安装
    GitLab安装
    Git for Linux
    PV并发UV
    yum安装zabbix故障报错
    redis备份恢复
    python递归-三元表达式-列表生成式-字典生成式-匿名函数-部分内置函数-04
    python函数闭包-装饰器-03
  • 原文地址:https://www.cnblogs.com/chinadhf/p/303608.html
Copyright © 2011-2022 走看看