有的人把委托看作是函数编程,而我并不这么认为,我觉得委托是为了更加接近OOP面向对象设计的,它把函数看作一个对象,只是与普通的对象存在一定的差异。
我先看这样一段代码,如下:
在C#的定义中delegate是一个类型,但是它是一种特殊的类型,方法的类型,它定义了方法参数和返回值,准确的说它是方法的集合,因为它可以将数个具有相同参数和返回值的方法累加起来形成一个链式反应。代码如下:
这种+=的方式是有顺序的,之所以说它是链式反应就是这个原因,这些方法就像链条一样一个接一个执行,直到最后一个。在C#中已经为我们定义好了2个泛型模版的函数类型:Func和Action,下面我们来看看如何使用它:
Action是一个没有返回值的委托类型,你可以用如Action<T,T,...>的方式来定义要传入的方法的参数格式,这里不多做介绍。
Func是具有一个返回值的委托类型,用法与Action类似,但是最后后一个类型作为方法返回值,并且它有且只有一个返回值。
可能大家都会存在一个疑问这种方式有什么好处,我举个简单的例子:如果我们有一个游泳馆,在这个游泳馆有3种人,一种是套路出牌做3件事 换泳衣 找泳池 游泳,第2种人直接穿着泳衣来,那它只用做两件事 找泳池 游泳,最后一种是工作人员可能时刻准备救人,它只有游泳一个动作,下面请看代码:
这样我们就可以控制这个链条了,当然这只是一个直线的链条,你可以设计分叉的链条让委托的参数也是委托,设计的更加丰富,如果想设计的更完美,请结合泛型。
我将继续努力,如有问题请留言,竭尽全力为您解忧