




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
听故事了解C#的委托的秘密 委托(delegate)是引用类型,它可以引用内存地址的方法把方法当参数来传递。其的原理是,把目的(委托的声明)告诉委托大臣(代理者),让大臣(代理者)自已来定义他需要怎么去做(和委托具有相同签名的具体实现方法)。 对委托进行讲解之前。我先说一个故事,我只记得大概的内容。然后我用委托去实现这个故事。 从前有一个国王King ,他有三个大臣(ministerA,ministerB,ministerC),他想考考这三个大臣中哪个是人才哪个是饭桶。于是有一天King对三个大臣说,我给你们每个人十个金币,你们离开王宫一年,看看你们可以用这十个金币为我带来些什么。三个大臣听完就后,就离开了王宫。 一年过去了,三个大臣分别回来了。大臣ministerA带回来了100颗金币,他对国王说:我出去之后就在一些地方做起了生意,生意越做越大,现在金币有100颗了;大王听后非常高兴,给ministerA另外加多100颗金币的奖励。 第2天,ministerB回来了,给国王带来了是一些本国没有的货物,国王也奖励了他10颗金币。 第3天,.ministerC回来了,给国王带来了是原来的十个金币,他对国王说:这一年他没有离开本国,为了表示对国王的敬爱,10个都保持都完好无缺.最后国王知道哪个是饭桶了,将ministerC变成平民。 从这个故事可以看出,国王委托了大臣去做一些事(委托的声明)。大臣们返回了不同的东西(委托声明中的返回值)。国王对大臣做的这些事进行了处理(委托可以让方法像参数一样传递给一个方法处理)。国王事先是不知道他们是返回什么东西的。但国王要他们有结果给他。我们就当国王大臣的返回的东西叫MinisterReturns吧Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-class MinisterReturns/虽然这里什么都没有,其实你可以把它理解成是一个子类的容器/故事中第一个大臣和第3个大臣返回的是金币,所以我这里将金币由MinisterReturns来派生吧class goldCoin : MinisterReturnsprivate int _coinsAmount;public goldCoin(int coinsAmount)this._coinsAmount = coinsAmount;public int coinsAmountgetreturn _coinsAmount; 故事中第2个大臣是带来了货物。Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-class goods : MinisterReturnsprivate string _goods = 精美的商品;public string Goodsgetreturn _goods; 在我们定义好了大臣返回的东西后,我们要定义国王这个类了,这个故事中国王主要对委托大臣做的事情的结果进行处理.这里也引出了委托的作用,委托可以将方法像参数一样传递给另一个方法,然后KING只要对参数进行处理就行了,所以在定义king之前我们先定义好一个委托先。Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-delegate MinisterReturns MinisterOneYearDo(); 由于每一个大臣得到的都是10个金币,所以没必要传参数进去了。下面我们来定义国王要做的事情,国王要做的事情就是要处理委托做完事后的结果。Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-public static void handleMinisterOneyearDo(MinisterOneYearDo action) 结果是对大臣A奖励,对大臣B奖励,对大臣C处罚。Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-class kingpublic static string KingsOrder = 让三个大臣用10个金币在王宫外一年的时间给国王带来一些东西.;public static void handleMinisterOneyearDo(MinisterOneYearDo action) MinisterReturns minreturns = action(); if (minreturns is goldCoin)switch (goldCoin)minreturns).coinsAmount)case 100:Console.WriteLine(king非常高兴大臣1的表现,奖多100个金币);break;case 10:Console.WriteLine(king觉得这个是饭桶,变为平民);break;default:break;if (minreturns is goods)Console.WriteLine(king非常高兴大臣2的表现,奖多10个金币); 下面是三个大臣根据委托的签名定义的方法,注意的是我们定义的委托签名是要返回MinisterReturns,但下面三个大臣返回的东西都不一样。为什么可以这样做呢? 我们在下面结果运行后在进行解析:Code highlighting produced by Actipro CodeHighlighter (freeware)http:/www.CodeH/-class MinisterApublic static goldCoin MinisterAOneYearDo()goldCoin coins = new goldCoin(100);Console.WriteLine(我是大臣A,我给国王带来了100颗金币.);return coins;class MinisterBpublic static goods MinisterBOneYearDo()goods GOODS = new goods();Console.WriteLine(我是大臣B,我给国王带来了本国没有的精美货物.);return GOODS; class MinisterCpublic static goldCoin MinisterCOneYearDo()goldCoin coins = new goldCoin(10);Console.WriteLine(我是大臣C,我给国王带来了还是原来的那10颗金币.);return coins;class Programstatic void Main(string args)/让我们了解下国王的命令,其实就是我们委托的签名/delegate MinisterReturns MinisterOneYearDo();Console.WriteLine(国王的命令:,king.KingsOrder);/大臣A根据委托的签名的所写的方法传给另一个方法去处理king.handleMinisterOneyearDo(MinisterA.MinisterAOneYearDo);Console.ReadLine();/大臣B根据委托的签名的所写的方法传给另一个方法去处理king.handleMinisterOneyearDo(MinisterB.MinisterBOneYearDo);Console.ReadLine();/大臣C根据委托的签名的所写的方法传给另一个方法去处理king.handleMinisterOneyearDo(MinisterC.MinisterCOneYearDo);Console.ReadLine(); 上面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版拆迁房屋买卖合同范本
- 2025年事业单位工勤技能-河北-河北地质勘查员五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-河北-河北保健按摩师五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西政务服务办事员四级(中级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西保健按摩师一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏无损探伤工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西铸造工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西有线广播电视机务员四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西垃圾清扫与处理工四级(中级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西下水道养护工四级(中级工)历年参考题库含答案解析
- 反应釜操作知识培训课件
- 2025年一级建造师《建筑工程管理与实务》试卷真题(附解析)
- 物业薪酬管理办法
- 外场管理制度
- 集团公司新闻宣传工作管理办法
- 物业消防安全管理制度
- 无线电监测技术设施运行维护项目需求
- NSA2000变频器使用说明书
- 动物生理学电子教案
- 2025年电梯修理T证试题(附答案)
- 学校开荒保洁服务方案
评论
0/150
提交评论