C#杂记之壹:委托与事件
此前虽然接触过C#中的一些较为高级的操作,但基本是只知其有,不知在哪些场景下可以应用。这几天写着代码就顿觉冗杂不堪,虽然能跑但看起来十分难受,希望寻求一些函数式编程之类的魔法来简化流程。
那首先要理解的还是委托和事件。虽然学完了也不一定会用,但看懂一点总是好的。
¶委托
¶定义
如之前所说,委托类似于函数指针。或者说,委托/是/一种/存储/函数引用/的/类型(注意断句)。由于函数的参数须是变量、常量、表达式,只要把函数变成一种引用类型的变量,就可以让一个函数作为其它函数的参数了。同样,也可以通过直接调用委托变量来调用委托变量所引用的函数。
为什么要把类型加粗?因为声明一个委托类型并不是声明一个委托变量,而是一类委托的模板,说明了这类委托应具有的的返回值类型与参数列表。委托类型与具体的委托变量之关系,类似于“类”和“对象”的关系。
委托类型声明和函数类似,拥有返回值类型和参数列表,但没有函数体,并且在前面用delegate
关键字声明这是一个委托类型。然后我们再声明这个委托类型的变量:
1 | //声明委托类型和委托变量 |
实际上,委托确实是一种“类”。上面所展示的委托变量声明,其形式就和类的实例化完全一致。在委托变量后面打个点,你甚至能看到一堆委托类型包含的方法和属性: