首页 > 技术文章 > 用委托实现插件式编程

XiaoRuLiang 2020-03-05 21:08 原文

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

例如,我们有一个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); 

 

推荐阅读