前言:
我们先看下方法之间的调用
public void Method01()
{
Method02();
}
public void Method02()
{
}
这是我们常规的一个写法,但是也暴露了一个问题,我们这样就把方法给写死了,Method01只能调用Method02!那么我们如何来改变这样的情况。
我们想到的是,能不能像传入参数一样将方法作为某种类型的变量传到另外一个方法。
所以,要解决的是,如何来定义这么一个类型,C#就专门提供了这样的一个关键字,让我们自定义这种类型,这个关键字叫做delegate。
委托
委托的定义: 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
委托的使用:将方法作为方法的参数.
通过使用delegate加上方法的签名及返回值,我们就可以声明一个委托类型。
例如:
public delegate void MyDelegate();
可以看到,他的签名和声明一个自定义函数差不多,不过就是多了一个delegate,声明完之后,我们就完成了MyDelegate这个类的定义,我们可以像类一样使用它,
但是由这个类声明的对象只能来引用函数,并且函数只能是无参且无返回类型的。
一:将方法作为方法的参数
无参方法调用代码:
有参方法的调用:
两种方法运行结果一样都是:
到这里大家可能就有点明白委托的使用了吧,将方法作为方法的参数。
二:将委托绑定多个方法:
(1):+= 绑定方法:
代码演示:
(2):-= 解除绑定方法:
代码演示:
到这里大家就明白委托的第二个用处了吧,绑定多个方法。
事件
声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
事件的作用: 它封装了委托类型的变量,使得:在类的内部,不管你声明它是public还是protected,它总是private的。在类的外部,注册“+=”和注销“-=”的访问限定符与你在声明事件时使用的访问符相同。