C#——委托与事件简单使用

C#——委托与事件简单使用

一、介绍
最近整合了一些委托与事件的笔记,写了一些示例。下面直接上干货

二、使用
定义委托:关键字 Delegate
C#——委托与事件简单使用
使用委托:多种写法
C#——委托与事件简单使用

此处声明了四种情况的委托,分别都用了一种写法实现。所有委托都可以用这些写法实现。不要掉入误区。
在实例化,静态方式使用委托时都是传入的方法都是具体的方法实现。
C#——委托与事件简单使用
执行结果:
在控制台程序的Main()函数中调用Show()方法执行刚才定义的委托;
C#——委托与事件简单使用

在控制台看输出是我们想要实现的。这就完成了基本的使用了。
C#——委托与事件简单使用
使用原因:通过委托做到逻辑解耦,保证方法的稳定扩展
定义三个方法分别为以下:C#——委托与事件简单使用
举例介绍:如果要执行一个打招呼的方式,现在只有早上,中午,下午三种方式。如果要多加一个方式,我们就需要修改原有的逻辑。这样就是代码的代码的耦合度就很高,而且扩展起来的话也就很麻烦容易出错。如果有需求让我们记录都给谁打过招呼,我们不可能在每个实现的方法中做记录,那样太麻烦,如果几百个实现方法我们就得在这几百个实现方法中做修改,这样做就会很麻烦。

实现:定义一个条件委托
C#——委托与事件简单使用
定义一个执行方式
C#——委托与事件简单使用
在这个方法中可以看到,我们将定义的委托当做参数传进方法中执行。相当于委托中的方法统一由此处执行,
做到了统一的管理。如果要扩展添加一个新的方法,我们就不需要动原来的逻辑,都可以在此处处理。保证
了程序扩展的稳定性。
上层的调用:C#——委托与事件简单使用
执行结果C#——委托与事件简单使用
看到我们的执行方法,是没有问题的。在收集资料的过程中,也看到过很多帖子说这样写可以减少if-else/switch的判断。当我写完想了想并不能做到。试想我们最原始的做法if-else/switch用来判断要进行那种方式细节的实现,我们通过委托进行处理以后,我们依然需要判断。就拿上述的例子来说,我们用委托去进行实现,就好比要实现的细节通过委托传递,由一个统一的入口进行执行(由Speak()方法执行)。但是这并不能影响到上层我们需要判断此时此刻这个人要进行哪种方式打招呼。

多播委托
C#——委托与事件简单使用
委托 += 累计有两个及两个以上的执行方法就为多播委托。我在注释中说明了一些注意问题。
执行结果
C#——委托与事件简单使用
可以在这看到,我添加了5个执行方法,但是删除了一模一样的5个执行方法。但是在委托执行的的时候,还是执行了三个方法,按理来说这是不应该的吧!这个时候看我定义的多播委托时的注释。

定义事件:关键字 Event
C#——委托与事件简单使用
这样就是将无参无返回值的委托修饰成了事件。
实现事件
C#——委托与事件简单使用
可以看到由于事件我是没法在外部执行,它只能在外部进行添加/删除执行方法。所以我定义了一个执行方法在内部执行事件。
C#——委托与事件简单使用
三、拓展
一般在使用委托的时候我们可以使用微软封装的方法,能满足我们绝大部分的需求。
Action:无参无返回值/有参无返回值
Func:有参有返回值/无参有返回值
看一下实现:
C#——委托与事件简单使用
使用方式跟我们自己写的委托是一样的。
Action,Func参数类型都是泛型的,最多可以传入16个泛型参数。Func会多一个因为有一个返回参数,传入一个形参会识别成返回参数。
FuncDelegate 像这个委托里面Int为入参类型,Response为返回参数,不论要传入几个参数,最后一个参数都为返回参数。

四、 结束
当掌握了这些技术点,对我们的开发过程中有很大的帮助。可以帮助我们提高代码的复用,解耦。以上是我自己的一些总结,比较潦草。如果有什么不对的地方欢迎大家指出。如果想要上述的源码,可以私聊。