我牵头,你做事——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. windows下sqlite3静态库和动态库的编译

    1.下载sqlite3源码:http://www.sqlite.org/download.html 主要是sqlite-amalgamation-XXXXXXX.zip.sqlite-dll-win3 ...

  2. 暴力求解——素环数 Prime Ring Problem ,UVa 524

    Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers i ...

  3. Java nextInt()函数

    nextInt( int num) 能接受一个整数作为它所产生的随机整数的上限,下限为零,比如:nextInt(4)将产生0,1,2,3这4个数字中的任何一个数字,注意这里不是0-4,而是0-3..但 ...

  4. JavaScript中的加号

    JavaScript中的加号“+”可以作为数学运算符的加,也可以作为字符串拼接,也可以作为一元运算符,表示正数. 1+2 "2"+"3" 3+"2&q ...

  5. Ancient Message (古埃及象形文字识别 Uva 1103)

    原题:https://uva.onlinejudge.org/external/11/1103.pdf 给一幅图(16进制), 判断图中有哪些象形文字. 只识别 这6个就可以 示例: 将16进制数据 ...

  6. Java Web应用的开发模式

    一.概述 从互联网诞生的第一天起,web从一个简单的静态页面,发展到今天五花八门.令人眼花缭乱的复杂应用,大到企业级的web应用系统,小到简单的SPA管理系统.在硬件性能提升的同时,通过各种技术实现了 ...

  7. lnux内核的malloc实现(Oracle的cache buffer影子)

    lnux内核的malloc实现(Oracle的cache buffer影子) 本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/artic ...

  8. Preloading an Image with jQuery--reference

    Preloading images will make your application a bit faster by making it lightweight. It is very simpl ...

  9. 使用HTML5 WebDataBase设计离线数据库

    基于HTML5的Web DataBase 可以让你在浏览器中进行数据持久地存储管理和有效查询,假设你的离线应用程序有需要规范化的存储功能,那么使用Web DataBase,可以使你的应用程序无论是在离 ...

  10. Android群英传》读书笔记 (1) 第一章 Android体系与系统架构 + 第二章 Android开发工具新接触

    第一章 Android体系与系统架构 1.Dalvik 和 ARTDalvik好比是一辆可折叠的自行车,平时是折叠的,只有骑的时候,才需要组装起来用.ART好比是一辆组装好了的自行车,装好就可以骑了. ...