用委托实现插件式编程

来源:互联网 发布:淘宝可以改实名认证吗 编辑:程序博客网 时间:2024/06/05 17:26

我们可以利用“委托是一个能把方法作为参数传递的对象”这一特点,来实现一种插件式编程。

例如,我们有一个Utility类,这个类实现一个通用方法(Calculate),用来执行任何有一个整型参数和整型返回值的方法。这样说有点抽象,下面来看一个例子:

delegate int Calculator(int x);class Program {    static int Double(int x) { return x * 2; }    static void Main(string[] args) {        int[] values = { 1,2,3,4};        Utility.Calculate(values, Double);        foreach (int i in values)            Console.Write(i + " "); // 2 4 6 8        Console.ReadKey();    }}class Utility {    public static void Calculate(int[] values, Calculator c) {        for (int i = 0; i < values.Length; i++)            values[i] = c(values[i]);    }}

这个例子中的Utility是固定不变的,程序实现了整数的Double功能。我们可以把这个Double方法看作是一个插件,如果将来还要实现诸如求平方、求立方的计算,我们只需向程序中不断添加插件就可以了。

如果Double方法是临时的,只调用一次,若在整个程序中不会有第二次调用,那么我们可以在Main方法中更简洁更灵活的使用这种插件式编程,无需先定义方法,使用λ表达式即可,如:

...Utility.Calculate(values, x => x * 2);...

0 0
原创粉丝点击