C优雅编程之事件系统(三)进阶级
上一节我们解决了界面死锁的问题,参考:C#优雅编程之事件系统:(二)入门级
但是如果有100个类似的功能,该如何设计这个类呢?
首先我们需要做的就是新建一个FileSearch类,把什么代码都放在界面类中处理终归是成不了系统。
稍作整理后,我们得到的结果应该是下面的图示:
logs是显示信息到输入框;tip是显示信息到label控件,这两个函数都是要跟界面交互的,难不成我需要在类中声明一个Form对象?但是每个界面对这些事件的处理都不同,如果是读取内容呢?如果是写入内容呢?.... 可以说,处理方式有很多种,我们是无法穷举的,所以这里我们需要的应该是一个函数变量,我们可以在调用查询前提前设置好这些函数变量,当这些事件到来的时候,动态调用这些函数就好了,我们把这种通常叫回调函数。
这里我们需要引进一个关键字,Action,这个专门就是用来声明回调函数的,我们按F12可以看到它的声明,其实就是delegate,代理。
比如分别声明带参数和不带函数的变量:Action fun_no_param; Action fun_has_param;
调用时:fun_no_param(); fun_has_param("hello");
这个就可以完美解决上一节我们提出的问题了,我只要在调用的时候指定这些函数的调用去向,等查询到内容时,就自动调用到我指定的函数中了。无论以后有多少调用的地方,只要调用之前指定好了就可以。
于是我们继续做改进计划:
FileSearch类代码: public class FileSearch { public Action