博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拒绝“高冷”词汇!初学C#中的委托
阅读量:5950 次
发布时间:2019-06-19

本文共 2452 字,大约阅读时间需要 8 分钟。

 

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

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

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

 

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

1 class Program 2     { 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 Program 2     { 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=ass214             ass1 += ass2;     15 16             ass1("一位贵宾要来了!");17 18             Console.ReadKey();19         }20 21         public delegate void Convey_Dele(string command);22     }

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

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

 

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

转载地址:http://rgixx.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
如何辨别android开发包的安全性
查看>>
Eclipse Java @Override 报错
查看>>
交换机之间的VLAN通信(trunk)
查看>>
heartbeat-gui
查看>>
51CTO博客中直接粘贴截图的方法
查看>>
N26-第二周作业
查看>>
关于一阶逻辑中实例化的可满足性问题
查看>>
cut命令用法讲解
查看>>
我的第一篇日志。
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
企业实战:mysql5.6数据库备份、恢复脚本
查看>>
RabbitMQ(消息队列)Linux安装相关问题解决
查看>>
我的友情链接
查看>>
CentOS7安装mysql
查看>>
RMB數字轉換中文
查看>>
基于rhel7.2的Zabbix平台搭建和部署(二)
查看>>