我牵头,你做事——C#委托实践一

2007-09-05 23:54:54

标签:委托

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://wangjierui.blog.51cto.com/186879/41225
计算机在不断的模拟人类现实世界,总有一天,在这个世界上将无法区分谁是计算机,谁是原生人……
 
(以下文字纯属个人理解,酌情参考)
直到如今,我们在管理上习惯于大包大揽,对事情总是喜欢制定出绝对的计划,非得弄出个一二三,然后对下属分配好任务,下属需要的只是服从,按照计划执行就可以了。而这样的工作方式,往往不能适应实际情况的变化。早在战国时期,就有“将在外,君命有所不受”的觉悟了,说这话的人如果做软件,将是功能扩展性编程的始祖。所谓功能扩展性编程就是将功能的具体实现放到程序外。如果我们在程序设计的时候,无法预料对于某个事件的处理程序究竟是什么样的,那就“委托”给使用者去自行处理,当然,使用者必须和我们签订一份协议,遵循我们的规范。把这个理念放到C#编程中,就是委托(Delegate)。
 
比如,我们最常用的控件之一——Button,微软在制作这个控件的时候,对于点击事件已经实现了一部分功能,那就是压下去又弹上来。可是我们拽一个按钮到窗体上,当然不是看它弹上弹下的,而是希望他能处理某些功能,比如张三想用来播放一首歌,李四想用来弹出另外一个窗体等等。对于这种情况,微软干脆来了个委托,把责任推卸给开发人员自己去实现,出了问题,开发人员难逃其咎,这招实在是高明。要不然我们怎么办?难道要微软开发一个点击后可以播放音乐的按钮?或者点击可以弹出一个窗口的按钮?活都让微软做了,我们程序员还靠什么吃饭^_^
 
说了这么多,委托也就差不多清楚了。委托协议将原计划与实际活动联系起来,落实到编程语言中就是用指针将各个实现方法联系起来。比如Button控件在原有的压下弹上的功能基础上,用EventHandler委托关系连接到Button_Click上,就实现了一连串动作:压下,弹上来,播放一段音乐。当然我们可以用“多播”的方式,关联到更多的功能上去,就和串糖葫芦一样。记住,糖葫芦是有顺序的。
 
今晚碰到了一个问题,想来想去用委托实现最为简单,拿出来作为一个应用例子吧:
我在一个解决方案中,使用了A,B,C三个程序集,其中依赖关系如上图。本来,我在A中有如下代码
if(C.Method()) A.Method();
即A依赖于C的某个动作而需要作出反应。后来,我在B中也需要做如上动作,但如何在B中使用A的代码呢?在尽量避免互相引用的原则下,虽然考虑到用反射,但是最终觉得用委托是最方便的解决方案。
 
既然动作都是由C牵头的,则由C做一个委托类型,A中实现C的委托。这样的话,如果B找C做事情,C做了自己该做的,剩下的就委托给A来做,间接实现B调用A的代码。这也是设计模式中常用的手段,在很多场合,委托可以代替接口实现间接调用。
 
 
 
 
 
 

本文出自 “王杰瑞的技术博客” 博客,请务必保留此出处http://wangjierui.blog.51cto.com/186879/41225

我牵头,你做事——C#委托实践的更多相关文章

  1. 代理委托和block

    delegate 委托是协议的一种,顾名思义,就是委托他人帮自己去做事.委托是给一个对象提供机会对另一个对象中的变化做出反应或者影响另一个对象的行为.其基本思想是:两个对象协同解决问题,并且打算在广泛 ...

  2. 10招让你成为杰出的Java程序员(转)

    如果你是一个热衷于技术的 Java 程序员, 那么下面的 10 个要点可以让你在众多 Java 开发人员中脱颖而出. 1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 Ob ...

  3. java提升路线

    转载自:http://blog.csdn.net/a151296/article/details/43658853 作为一名即将从事java开发的应届毕业生,迷茫中,转载此篇文章,作为提升自己的学习方 ...

  4. 优秀Java程序员必备10招

    1. 拥有扎实的基础和深刻理解 OO 原则 对于 Java 程序员,深刻理解 ObjectOriented Programming(面向对象编程)这一概念是必须的.没有 OOPS 的坚实基础,就领会不 ...

  5. 如何提高自己的java开发功底

    1.拥有扎实的基础和深刻理解OO原则 对于Java程序员,深刻理解Object Oriented Programming(面向对象编程)这一概念是必须的.没有OOPS的坚实基础,就领会不了像Java这 ...

  6. c#中,委托Func的简单实践

    c# 委托Func的简单实践最近才真正的接触委托,所以针对Func类型的委托,做一个实践练习. 首先说一些我对委托的初级理解:"就是把方法当做参数,传进委托方法里". 我平时用到的 ...

  7. 从Oracle到MySQL,余额宝云实践分享

    原文链接:http://www.csdn.net/article/2013-11-/2817426-interview-financial-case-yuerbao-aliyun07 余额宝.百度百发 ...

  8. 一个关于运维人员做事的很好的case,拿出来和大家共勉

    很久没有写KM了,最近lester这边在梳理CDB这边存在的问题,并推动那些问题解决措施的落地.无疑当前CDB存在比较多的问题,也有很多坑.需要我们运维和开发的同学多思考问题的根源和解决办法,并付诸实 ...

  9. 互联网大厂目标管理OKR实践落地与反思

    上一篇「 互联网公司目标管理OKR和绩效考核的误区 」介绍了使用 OKR 时要澄清的一些概念,但是实际使用中又如何呢?我们快手也是很大的互联网公司,大家都是年轻人,思维活跃,容易接受新事物,敢尝试,但 ...

随机推荐

  1. sed删除文本第一个匹配行

    源文本如下,要求删除第一个为happy-123456的行. ----------------------------- aaaaaaa happy- bbbbbb asdasawe happy- ds ...

  2. 线段树(倒序操作):POJ 2828 Buy Tickets

    Buy Tickets   Description Railway tickets were difficult to buy around the Lunar New Year in China, ...

  3. Mac下Intellij IDea发布Web项目详解一

    Mac下Intellij IDea发布Web项目详解一 Mac下Intellij IDea发布Java Web项目(适合第一次配置Tomcat的家伙们)详解二 Mac下Intellij IDea发布J ...

  4. Struts2学习笔记(三):result配置的各项视图转发类型

    Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...

  5. Android的adb命令使用以及在DOS的一系列操作

    adb是什么?:adb的全称为Android Debug Bridge,就是起到调试桥的作用.      adb有什么用?:借助adb工具,我们可以管理设备或手机模拟器的状态.还可以进行很多手机操作, ...

  6. js标题文字向上滚动

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. cgdb调试postgresql

    之前一直用gdb调试代码,最近在搞pg的时候用了一个cgdb,体验很好,调试pg代码的时候真的很方便. 本文主要讲解在进行pg内核开发的时候,如何搭建一个环境,用cgdb方便快捷的调试postgres ...

  8. Leetcode - Reverse Words

    比起POJ弱爆了一题,从后往前扫描一遍,O(n)时间,仅仅要注意各种极端情况就可以,不明确通过率为什么仅仅有13%. #include<iostream> #include<stri ...

  9. [Flux] Stores

    Store, in Flux which manager the state of the application. You can use EventEmiiter to listen to the ...

  10. Java基础知识强化之IO流笔记17:FileOutputStream构造方法使用

    1. 可以参照之前写的笔记:   Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流) 2. FileOutputStream(常用的)构造方法: FileOu ...