已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026甘肃嘉峪关市教育系统招聘公费师范毕业生和小学全科型教师37人笔试考试备考试题及答案解析
- 2025广东肇庆鼎湖区就业困难人员(脱贫劳动力)公益性岗位招聘1人笔试考试参考题库及答案解析
- 2025贵阳产业发展控股集团有限公司实习生招聘12人笔试考试参考题库及答案解析
- 2025年新能源行业企业数字化转型政策环境与风险应对报告
- 2025浙江杭州市委党校萧山区分校招聘事业人员1人考试笔试备考试题及答案解析
- 2025年新能源行业供应链风险管理培训师资报告
- 2025年西安交大一附院基建规划办公室招聘(2人)考试笔试备考试题及答案解析
- 2025贵州黔南州长顺县县直机关事业单位面向全县考调工作人员19人考试笔试备考题库及答案解析
- 托管老师的实习总结
- 2025广西北海市中日友谊中学秋季学期教师招聘2人考试笔试模拟试题及答案解析
- 三年安全生产治本攻坚行动方案
- 项目安全管理组织机构及职责
- 2025年国企竞聘上岗笔试题干部竞聘上岗笔试题+答案
- 云南省2025云南曲靖市马龙区部分事业单位选调(含选调)26人笔试历年参考题库附带答案详解
- 输电线路导线弧垂调整技术指南
- 内生真菌对丹参毛状根生长与次生代谢的影响及分子机制探究
- 2024年卫生高级职称面审答辩(呼吸内科)(副高面审)经典试题及答案
- 八年级人教版语文上册期末考试试卷及答案
- 购房合同范本-多篇
- 长期照护师技能考试试卷与答案
- 医院常用仪器设备使用规范
评论
0/150
提交评论