网站地图
首页
新闻
电影新闻
电视新闻
人物新闻
专题策划
影评
最新影评
新片热评
经典赏析
媒体评论
电影院
北京影讯
上海影讯
广州影讯
深圳影讯
成都影讯
电影库
典藏佳片
全球新片
即将上映
票房榜
社区
日志
相册
电影
好友
专辑
收藏
影视杂谈
明星时尚
文化休闲
群组
话题
达人
排行榜
电影榜
电视榜
人物榜
日志榜
话题榜

万水千山走遍

您当前的位置: 社区>> 博客>>

编辑 | 删除 科学日记 -- C#的委托、事件与接口

福临 发布于:

几个月前第一遍把C#翻到委托与事件时,顿时感觉晕头转向找不到北,查阅了很多资料,问了很多人,七窍总算是通了六窍。C#是一门高深莫测的语言,学习的过程中经常让我怀疑自己是否具备程序员的DNAC#又是一门严重依赖好教材才能学下去的语言,当你决定开始学习它时,最好祈祷自己不要买到一本某大拿写出来自娱自乐的书,否则你就等着越看越忧郁越看越自卑吧,这种书写出来就是为了让更多的人半途而废掌握不了C#的。

 

牛角尖是万万钻不得的,看不下去的时候就去做点别的事,有感觉了再看也不迟,就像找东西找不到时,焦急万分、火冒三丈是完全没必要的。你找它时找不到,不找时它自己倒冒出来了,学习C#也经常出现类似的情况:你想弄明白它时,它偏不让你明白,你不想明白它时,它却突然与你坦诚相见了。

 

现实世界中,你委托别人做一件事,真正做事的是别人,享受成果的却是你。比如,你委托你哥去“啐那小人一口”,损失唾液的不是你,是你哥,而享受小人被啐后快感的人却是你。在这个例子中,你哥真是为你两肋插刀啊,换了我一定会说,“还是你自己去啐吧。”让我们再举一个稍微现实些的例子:有一天,你委托张三帮你买美元,李四买英镑,王五买欧元,冯六买新币,这个委托执行的结果是,张三李四王五冯六到银行排队买汇并且把钱汇到你户头的,而你什么也没做账户里就多了四种你想要的外币(当然也少了灰常灰常多的本币)。

 

C#中,所谓委托就是一组方法的集合。对于要做的事情,委托本身并不出力,出力的是包含在委托中的方法。在上面的例子中,“买汇”是一个委托,但它只是一个壳子,如果没有“张三买美元”,“李四买英镑”这些具体的方法,它什么也买不回来。这与现实生活中的委托是非常相似的,所以C#将它命名为委托是很形象的。

 

但是,委托对于自己的“会员”是有严格要求的,只有满足特定条件的方法才可以进入。比如,“买汇”委托要求:首先,买回来的必须是现汇而不能是现钞;其次,必须去正规银行买卖。在上面的例子里,如果冯六偏好地下***庄这样的野路子,他就不会被“买汇”委托所接纳。需要注意的是,委托一旦被执行,其中的方法就会全部被执行,不存在其中某个方法被漏掉的情况。

 

委托讲清楚了,事件就很简单了。在C#中,委托与事件总是相伴相随的,甚至可以夸张地说,如果没有委托,事件存在的意义也就不大了。仍然以买汇为例,假如你给自己定下一个目标:一旦账户里的人民币攒够100万就去买美元、英镑、欧元和新币。那么,你的这个目标就是一个事件,存款数额到达100万时事件就会被触发,触发的结果是绑定在一起的“买汇”委托被执行。

 

曾经令我辗转反侧、仰天长叹的委托与事件,想明白后也不过如此。也许,对于某些随便死几个脑细胞就能把C#搞清楚的达人来说,如此理解仍然十分肤浅,我也希望实际情况是这样的,费了这么大的劲,耗费了这么多时间,只有当“不明白”遇到“很难”时才好给自己找个台阶下嘛。

 

至于接口,阅读了网上的很多资料,唯一认可的解释是:一个类一旦继承了一个接口,就必须在类里实现这个接口的方法。在分工合作的情况下,其他程序员查看这个类,知道它继承了某个接口,就知道通过这个类调用继承接口的方法是绝对安全的。他根本不用关心类里是否完成了方法,或者方法具体是怎么规定的。

 

举个通俗的例子,比如“外星人”这个类继承了“吃”“喝”“拉”“撒”四个接口,当需要写一段程序“给外星人一盘毛毛虫吃”,程序员达爱斯心想,让我去哄哄小飞哥还行,外星人这个领域我可不熟啊,他们究竟怎么吃啊,吃了后有什么反应啊?带着这些疑问,他查看了“外星人”这个类,发现它已经继承了“吃”这个接口,达爱斯立刻喜笑颜开,心想,前人栽树我乘凉的事就是我这辈子的主旋律啊,于是她大笔一挥写下:外星人.吃(毛毛虫),一切都搞定了!

回复 (27) | 收藏 (0) | 14269 次阅读 |

法郎 (北京)

男