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

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

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

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

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

转载于:https://www.cnblogs.com/chinadhf/archive/2005/12/23/303608.html

笑谈“委托”与“事件”相关推荐

  1. [C#]委托和事件(讲解的非常不错)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  2. .NET基础示例系列之六:委托及事件

    委托是一个类. 定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法.示例: public partial class Form1 : F ...

  3. 大白话系列之C#委托与事件讲解(一)

    从序言中,大家应该对委托和事件的重要性有点了解了吧,虽然说我们现在还是能模糊,但是从我的大白话系列中,我会把这些概念说的通俗易懂的.首先,我们还是先说说委托吧,从字面上理解,只要是中国人应该都知道这个 ...

  4. 委托、事件、事件访问器

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 委托与事 ...

  5. js中的事件委托或是事件代理详解(转载)

    起因: 1.这是前端面试的经典题型,要去找工作的小伙伴看看还是有帮助的: 2.其实我一直都没弄明白,写这个一是为了备忘,二是给其他的知其然不知其所以然的小伙伴们以参考: 概述: 那什么叫事件委托呢?它 ...

  6. JS事件委托或者事件代理原理以及实现

    事件委托(事件代理)原理:简单的说就是将事件交由别人来执行,就是将子元素的事件通过冒泡的形式交由父元素来执行. 为什么要用时间委托? 在JavaScript中,添加到页面上的事件处理程序数量将直接关系 ...

  7. 对C#下函数,委托,事件的一点理解!

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 今天一来是有点 ...

  8. 13委托和事件在观察者模式中的应用

    当一个被监视对象的方法执行会触发观察者Observer的方法的时候,我们就可以在被监视对象中声明委托和事件. 例子 有一个宠物追踪器挂宠物身上,只要宠物离开主人100米之外,主人手上的显示器显示警告信 ...

  9. C#综合揭秘——深入分析委托与事件

    引言 本篇文章将为你介绍一下 Delegate 的使用方式,逐渐揭开 C# 当中事件(Event)的由来,它能使处理委托类型的过程变得更加简单. 还将为您解释委托的协变与逆变,以及如何使用 Deleg ...

最新文章

  1. NVIDIA安倍架构
  2. AI基础:入门人工智能必看的论文【附下载链接】
  3. linux高级数据存储
  4. 091_类数组对象转为数组
  5. 15个实用的grep示例
  6. mybatis --入门 单表增删改查-curd
  7. 2021年最后一个月
  8. 维宏云智能工厂系统1.0全面升级,带你体验豪华智能制造
  9. 基于FusionInsight Manager的大数据架构图
  10. 从零开始自制实现WebServer(一)---- 万丈高楼平地起 步子得一步一步慢慢走
  11. 使用pip无法完全卸载autoitlibrary,提示 we cannot accurately determine which files belong to it which would‘解决办法
  12. 封装和private关键字
  13. 2020年的计算机专业就业形势,2020计算机专业就业分析
  14. 【Vue-仿照element-ui自己动手封装ui组件】—— alert、confirm 弹窗
  15. mysql dump 1449_mysqldump 1449错误的解决办法
  16. 一个优秀IT专家的成长历程 激励所有颓废的人们
  17. 2021年R1快开门式压力容器操作最新解析及R1快开门式压力容器操作证考试
  18. 2019年未来软件工作室年会总结
  19. 算法利用:人机交互面临的道德漏洞
  20. 获取微信二维码返回乱码

热门文章

  1. [C++对象模型][3]指针与数组
  2. .Net/C# 实现真正的只读的 Hashtable 类型的属性 (ReadOnly Hashtable Property)
  3. BaiduMapsApiDemo报错:请在 DemoApplication.java文件输入正确的授权Key
  4. 图片资源添加出现问题: No resource found that matches the given name
  5. 文件分割合并类(java)
  6. Android模块化之MicroModule(微信Pins工程) 1
  7. C#判断当前运行环境是否64bit
  8. maven学习笔记第一节一-maven install 模块之间相互引用
  9. 关于spring-data-jpa的排序问题
  10. 如何创建支持不同屏幕尺寸的Android应用(转载)