时间:2024/2/19来源:本站原创作者:佚名
白癜风好冶吗 http://www.jk100f.com/m/

我想你肯定知道委托和匿名函数。一般文章都会将委托和事件放在一起讨论,也有很多文章介绍匿名函数的用法。我想真诚地向你提一个问题,你自己写的代码里面有多少关于委托和匿名函数的代码,如果有的话,希望你写在评论里面。接下来我为大家讲解一下为什么我要将委托和匿名函数放在一起讨论。

委托是指"指向方法的引用"。是指"可以将一组实例方法或者静态方法绑定到一个委托类型的实例上,执行委托相当于执行了这个绑定的这组方法"。我想大家也非常明白这句话的意思和用法。

我想从委托的历史过程循序渐进地讲解一下,请看下图。

图1

图2

请看图1和图2,描述了C#1.0里面委托的用法,具体的用法我这里就不说了。我想说一点的是C#1.0里面委托必须写明创建实例化的过程,也就是

"newStringProcessor(xx)"

new实例化这句话必不可少,而且参数是一个方法,方法必须是实例化方法或者是静态方法。我想说的是上面这个例子并没有实战意义,我们首先会问C#1.0,那些微软的老外为什么要搞一个委托出来?我只能说他们高瞻远瞩,想到了委托的广泛运用的可行性。而事实上C#1.0委托并没有广泛运用,而只是常用到了winform里面事件上面。

那我们就先扯开话题聊一聊事件和委托的关系。面向面试编程的我们,对这个话题也非常明白,面试也是经常问的问题。那你给出的答案是什么呢?是"事件是特殊的委托"?或者是"事件是委托类型的实例"。我们先讲一下winform里面的事件应用。

我们知道winform里面添加一个界面,会有一个designer.cs,这个是系统生成的代码,而我们只需要在控件对应的事件绑定的方法写我们的逻辑就可以,触发控件就会触发这个绑定的方法代码。设计和绑定过程都是系统生成的代码。请查看下图

图3

图4

上面的例子很好理解,写法上,事件是类的成员,是在委托实例之前加了一个event关键字,它首先不是一个属性,所以不能通过get,set这样的用法。事件就是事件,他是和属性、字段、方法一样平起平坐的类的成员,而委托不是类的成员。事件也可以和委托一样绑定多个方法,而且触发事件就可以触发方法组。

设计事件和委托的侧重点是不一样的。事件其实是实现了"发布/订阅"设计模式的实现方式之一。"发布/订阅"设计模式重点是发布者和订阅者之间的信息交互,发布者发布一个信息渠道,订阅者订阅这个信息渠道,等到发布者发布信息的时候,订阅者可以通过这个渠道实时接收到信息。比如上面这个例子,按钮点击事件,发布者是按钮,订阅的是接收类,这个接收类可能就是当前窗体,等到按钮点击触发,当前窗体就可以通过绑定的方法接收信息。或者说生活中我们订阅
转载请注明原文网址:http://www.helimiaopu.com/cxys/cxys/13037.html

------分隔线----------------------------