关闭

我终于用到了委托

2340人阅读 评论(0) 收藏 举报

我终于用到了委托

左直拳

NET带来了一些新的东西,其中委托是一个。

我总觉得委托很神秘,比较难理解。看帮助,查资料,不是语焉不详,就是故弄玄虚,越看越糊涂。有时候,真有点怀疑网上写文章的这些人自己是否真的弄清楚了。

后来编码的时候用到了一下,总算有了点认识。一言以蔽之,委托的作用是使得函数可以当作参数和变量来使用。(今天又查了一下帮助,里面说委托作用类似于“ C++ 中函数指针”,因为我对函数指针不熟,所以,惭愧,怪不得之前不明白)。不过这个函数,其返回值、参数都要跟委托声明的一致才行。就好象螺丝孔,不是所有的螺丝钉都能拧进去,要尺寸大小合适才可以。

定义和使用委托分三个步骤:声明、实例化和调用。举例说明。

假设我们要写一段代码,实现“见人说人话尽人事,见鬼说鬼话怀鬼胎”的功能,怎么办呢?

先实现说话和做事函数。

void SpeakAsHuman()       {}//有一说一,说出人话

 

void SpeakAsGhost{}//经过大脑复杂运算,说出鬼话

 

void DoAsHuman(){};//尽人事

void DoAsGhost(){};//怀鬼胎

后使用委托来引用这些函

//声明一个委托

delegate void myDelegate();

 

//构造两个委托实例

myDelegate dlSpeak = null;    //说话

myDelegate dlDo = null;       //做事

 

//调用

switch( 遇见谁?)

{

   case 人:

//看,函数作为参数或对象用于赋值

//这跟平常构造一个变量有什么不同?如 StringBuilder str = new  StringBuilder("Hello World!");

dlSpeak = new myDelegate(SpeakAsHuman);

dlDo = new myDelegate(DoAsHuman);

break;

case :

dlSpeak = new myDelegate(SpeakAsGhost);

dlDo = new myDelegate(DoAsGhost);

break;

default:

break;

}

 

这样子处理后,dlSpeak,dlDo在见人或见鬼时,就会有不同的内涵,说话按扭cmdSpeak和做事按扭cmdDoOnClick事件就容易处理多了:

//点击了说话按扭

private void cmdSpeak_Click(object sender, System.EventArgs e)

{

       dlSpeak();

}

 

//点击了做事按扭

private void cmdDo_Click(object sender, System.EventArgs e)

{

       dlDo();

}

 

可以看见,代码比较简洁,逻辑上也更分明了。对于说话按扭和做事按扭来讲,什么都可以不理会,只须说和做就行,至于说什么,做什么,都已经预先定好。并且这个预先定好不是在开发阶段来设定,而是在运行阶段自行设定,多棒。

假如没有用委托,说话按扭cmdSpeak和做事按扭cmdDoOnClick事件中肯定要各判断一次,如下:

//点击了说话按扭

private void cmdSpeak_Click(object sender, System.EventArgs e)

{

       //调用

switch( 遇见谁?)

{

case 人:

SpeakAsHuman();

break;

case :

SpeakAsGhost();

break;

default:

break;

}

}

 

//点击了做事按扭

private void cmdDo_Click(object sender, System.EventArgs e)

{

       switch(……

}

 

上面的代码如果分开,说话及做事定义在一个类文件里,而按扭放在一个页面上,可以想见,利用委托,能够屏蔽许多细节,实现很好的封装性。

委托,也许可以理解为“函数的代理”?

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

net-snmp移植项目总结

1、       项目移植总结 1.1  交叉编译的configure参数的配置 交叉编译参数的设置,这个部分是最基本的,如果参数设置的有问题,snmpd运行起来就会有问题。 在x86环境下进行测试的时候,选用一...
  • qq_27204267
  • qq_27204267
  • 2016-07-04 11:22
  • 435

【HDU】-2112-HDU Today(最短路)

HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 25269 &...
  • Bear1998
  • Bear1998
  • 2016-08-04 21:00
  • 200

Nepire的校OJ入门题解—17蓝桥选拔篇(四)

欢迎来到Nepire的校OJ入门题解——————17蓝桥选拔篇(四)这次我主要是讲解第⑨届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛的七道题目,中间可能会扯到一些其他东西,然后就开始我们的入门题解吧呜喵Problem D:吵架 Description 小张终于在婚介所找到了女朋友,...
  • Nepire
  • Nepire
  • 2017-12-18 15:45
  • 92

NOIP2004P4 火星人 题解

算法:全排列
  • Foliciatarier
  • Foliciatarier
  • 2016-06-09 16:05
  • 652

终于到了今天

今天下午答辩
  • doubleselect
  • doubleselect
  • 2014-05-27 23:13
  • 815

【终于】我到了这一天

2016-10-12 距离noip还有一个月零一周,终于,我还是走到了这一天,一年走来,经历了从初中到高中的转变,学习方式,生活方式都彻底的变化了,记得去年的这个时候我还刚刚进这个竞赛,当时还什么也不知道,只是把它当作自己的一个兴趣,一时的热爱,使我坚持着学着她,眼看着一同上课的人一点点变少,我还...
  • qq_31917517
  • qq_31917517
  • 2016-10-13 00:22
  • 84

计算器的改良 (模拟)

计算器的改良 问题描述 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例:4+3x=8 ...
  • mymilkbottles
  • mymilkbottles
  • 2016-08-23 12:12
  • 341

JS和JQuery中的事件委托 学习笔记

事件委托其实并不是一个很高级的技巧,比如在一个页面里面,当只存在两个按钮的时候,可能你给按钮添加监听是这样的:(本文不考虑浏览器兼容性,关于事件的兼容性可参考前面的学习笔记)<div id="container"> <button id="bt...
  • u011366705
  • u011366705
  • 2015-07-23 01:06
  • 2557

luogu1022计算器的改良[noip2000提高组Day1 T1]

题目背景   NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6...
  • keshuqi
  • keshuqi
  • 2016-08-30 18:20
  • 292

1015 计算器的改良(维基oi)

题目描述 Description NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能。实验室将这个任务交给了一个刚进入的新手ZL先生。为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: ...
  • modiz
  • modiz
  • 2013-11-24 19:36
  • 1464
    个人资料
    • 访问:2463184次
    • 积分:33467
    • 等级:
    • 排名:第159名
    • 原创:910篇
    • 转载:0篇
    • 译文:0篇
    • 评论:627条
    文章分类
    最新评论