拒绝“高冷”词汇!初学C#中的委托

有一天,你写了好多好多带“形参”的构造函数(就是“方法”,同义),而且需要向这些构造函数里传递同样的“实参”,然后你就憨憨地一个一个函数的调用并赋予同样的“实参”,这一天就这么过去了...

又过了几天,你又要再一次调用这么多函数了,你再老老实实地一个一个函数进行调用?!聪明的你,肯定会想:真TM麻烦!有没有一劳永逸的办法呢?

你需要的正是----“委托”

来,先看一个简单的例子,要表述的是----有一位贵宾将要作客一家豪华的酒店,老板(boss)下发了通知,他的两个助理(ass1和ass2)分别要通知到女服务员(Waiteress)和厨师(Cooker),让他们该干啥干啥去。

 1 class Program2     {3         static void Main(string[] args)4         {5             //委托就是个“类”,也需要“实例化”,让“ass1”通知“Waiteress”。6             Convey_Dele ass1 = new Convey_Dele(Waiteress);7 8             //让“ass2”通知“Cooker”9             Convey_Dele ass2 = new Convey_Dele(Cooker);
10
11             //“boss”通知两个助理“ass1和ass2”,术语为“合并委托(或“多路广播委托”)”
12             Convey_Dele boss = new Convey_Dele(ass1 + ass2);
13
14             //“boss”发话
15             boss("一位贵宾要来了!");
16
17             Console.ReadKey();
18         }
19
20         //声明一个叫做“Convey_Dele”的委托,形参为“string command”
21         public delegate void Convey_Dele(string command);
22
23         //构造一个名为“Waiteress”的函数,构造函数的形参必须与委托形参一致!
24         public static void Waiteress(string command)
25         {
26             //“Waiteress”要去干的事儿
27             Console.WriteLine("女服务员接到通知:" + command + "所以她要去迎接客人");
28         }
29
30         public static void Cooker(string command)
31         {
32             Console.WriteLine("厨师也接到了通知:" + command + "所以他去准备饭菜");
33         }
34     }

运行后的结果:

这样,老板发出任何指令,下级都该干啥干啥去,老板不需要知道下级的具体动作是什么,只要干的好,完成就可以。

聪明的你,又会想,代码能否再简化和多样化呢?可以。上面代码可以更改为:

 1 class Program2     {3         static void Main(string[] args)4         {5             Convey_Dele ass1, ass2;6 7             //另写函数再实例化太麻烦了,直接在这里把函数一起写了。术语“匿名函数”,“delegate”是关键字8             ass1 = delegate (string command) { Console.WriteLine("女服务员接到通知:" + command + "所以她要去迎接客人"); };9
10             //匿名函数也太麻烦了,还得写“delegate”,改用一个符号来表示,术语“兰姆达表达式”
11             ass2 = (string command) => { Console.WriteLine("厨师也接到了通知:" + command + "所以他去准备饭菜"); };
12
13             //等同于 ass1 = ass1 + ass2,基本的“加等”运算符,“减等”也是可以使用的~ 比如:若ass1 = ass1 + ass2,那ass1 -= ass1等同于ass1=ass2
14             ass1 += ass2;
15
16             ass1("一位贵宾要来了!");
17
18             Console.ReadKey();
19         }
20
21         public delegate void Convey_Dele(string command);
22     }

运行后的结果与之前未简化前一模一样。这样的简化写法还是有很强的“可读性”的,“匿名函数”和“兰姆达表达式”还有更简单的写法,只要是一个形参,还可以连形参都省略,知道这回事就行了...

这样,我们在调用众多函数的时候就可以灵活运用委托来简化代码和“搬砖”的繁琐劳动。

好了,初学委托的内容就先讲这么多吧,我也是在一边学习,一边去理解的,在写博客时表现出来的有许多不足之处请广大园友指出,我不吝赐教!

拒绝“高冷”词汇!初学C#中的委托相关推荐

  1. git使用的基本流程_我并不是高冷(Git进行中01):git基本流程简介

    公司正式使用Git来管理代码到现在已经三四个月了,趁自己还算熟手,记录和分享一下Git的使用(会涉及正式开发中的使用方法,当然,各人还是会有各自的使用方法啦,并不是千篇一律) 介绍 Git是一款基于l ...

  2. 如何告别「伪勤奋」?高冷冷

    转载:如何告别「伪勤奋」?高冷冷_许可 我来教你如何做到真正的勤奋吧,学会这4点,告别伪勤奋. 你有很多目标,有关于上进的决心和焦虑,也或多或少做了一些努力.每天把自己搞得很累,回头却发现自己什么都没 ...

  3. C# 中的委托和事件

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

  4. C# 中的委托和事件(1)

    C# 中的委托和事件 欢迎浏览本文的后续文章: C#中的委托和事件(续) PDF 浏览:http://www.tracefact.net/Document/Delegates-and-Events-i ...

  5. C# 中的委托和事件(转载)

    C# 中的委托和事件 (今天去因为委托和事件这两个东西把我搞得头疼死了,偶然发现这篇文章,觉得非常不错,就copy过来了!) 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而 ...

  6. 【转】C# 中的委托和事件

    阅读目录 C# 中的委托和事件 引言 将方法作为方法的参数 将方法绑定到委托 事件的由来 事件和委托的编译代码 委托.事件与Observer设计模式 .Net Framework中的委托与事件 总结 ...

  7. 时间序列(七): 高冷贵族: 隐马尔可夫模型

    目录 高冷贵族: 隐马尔可夫模型 引言 例子 描述模型 基本概念* 定义 基本假设 基本问题 前向,后向算法 前向算法 后向算法 举例计算 学习问题 已知观测序列及隐序列 已知观测序列 预测问题 Vi ...

  8. C# 中的委托和事件[转]

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

  9. C# 中的委托和事件(详解) ....

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

最新文章

  1. Redis的学习记录
  2. IOS7 开发注意事项
  3. oracle 12 问题:需要 Oracle 客户端软件 8.1.7 或更高版本
  4. 【BZOJ1043】下落的圆盘 [计算几何]
  5. html页面foot,HTML tfoot用法及代码示例
  6. Redhat5下haproxy+keepalived+nginx配置笔记
  7. 关于编程学习及面试,推荐些适合的网站,希望对现在的你有帮助!
  8. 卸载oracle11g步骤_oracle11g完全卸载步骤来了,你真的不来看看吗
  9. 理解javascript
  10. SQL Server 2008 安装或卸载时提示“重启计算机失败的解决办法(转)
  11. autoComplete实现的输入下拉联想功能
  12. 随机过程通过线性系统matlab,随机信号分析实验:随机过程通过线性系统的分析.doc...
  13. 银监计算机类考试题库,干货!国考银监会财经类面试题库
  14. ggsci | 让你的配色Nature化
  15. RFID-Si24R1芯片基于Android 4.4平台的kernel驱动
  16. 通过深度学习实现对网络异常流量检测
  17. BAT文件执行输出中文乱码
  18. 送女友什么礼物最有意义?比较有纪念意义的礼物推荐
  19. Eigen介绍及简单使用
  20. ST电机库v5.4.4源代码分析(1): FOC原理(结合ST电机库)

热门文章

  1. java 反编译 类名_java javassist创建类和反编译类
  2. 设计模式 之 抽象工厂模式
  3. python基础 list和tuple
  4. “这张图告诉你什么?”
  5. day8网络编程,面向对象1
  6. Xshell替代品 -- FinalShell
  7. Android系统的开机画面显示过程分析(8)
  8. (转)直接拿来用!最火的iOS开源项目(一)
  9. 检查可执行文件所需要的共享库
  10. 前台jsp页面向后台传汉字出现乱码问题解决办法