我牵头,你做事——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. 线性代数(高斯消元):JSOI2008 球形空间产生器sphere

    JSOI2008 球形空间产生器sphere [题目描述] 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确 ...

  2. MD5加密详解

    MD5加密详解 引言: 我在百度百科上查找到了关于MD5的介绍,我从中摘要一些重要信息: Message Digest Algorithm MD5(中文名为信息摘要算法第五版)为计算机安全领域广泛使用 ...

  3. CentOS squid代理内网主机上网 openVpn配置

  4. C# WinForm登录窗口代码

    Main窗体为应用程式主窗体,Login为登录窗体.均为SDI窗体.     两种实现方式如下: 1.应用程式入口放在Login窗体,在Login窗体实现登录机制,验证通过则创建Main窗体的实例,并 ...

  5. (转)void指针(void *的用法)

    指针有两个属性:指向变量/对象的地址和长度 但是指针只存储地址,长度则取决于指针的类型 编译器根据指针的类型从指针指向的地址向后寻址 指针类型不同则寻址范围也不同,比如: int*从指定地址向后寻找4 ...

  6. 深入探索C++对象模型-1

    概述 在实际生产中,遇到一个复杂的类,如果能看出这个类的内存模型结构,那么以后的操作基本就没有难度的: 所以说,学会分析一个类的内存模型,是每一个C++程序员必须要会的知识. 下面,就让我们来了解C+ ...

  7. Apache MINA 框架之Handler介绍

    IoHandler 具备以下几个功能: sessionCreated sessionOpened sessionClosed sessionIdle exceptionCaught messageRe ...

  8. Directive Definition Object

    不知道为什么这个我并没有想翻译过来的欲望,或许我并没有都看熟透,不好误人子弟,原版奉上. Here's an example directive declared with a Directive D ...

  9. JS遍历对象或者数组

    一.纯js实现 <script> var obj = {"player_id":"GS001","event_id":" ...

  10. Design Pattern —— Singleton

    Design Pattern —— Singleton   强力推荐枚举和类级内部类方式实现单例模式 单例模式是开发中非常常用的一种模式,简单的说,我们希望一个类永远都只有一个对象. 主要有两个用途: ...