zoukankan      html  css  js  c++  java
  • 用委托实现插件式编程

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

    例如,我们有一个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); 
  • 相关阅读:
    Android Studio 生成Jar包时遇到的gradlew下载问题
    未解决问题
    Android -- android.os.Parcelable[] cannot be cast to ...
    vulkan gpu limits in mali
    Why GPU Program is expensive in CPU
    iOS native plugin 的代码sample
    USC-- compute shader ps vs
    zprepass 之后再base pass为什么用equal不用lessequal
    memory management Vulkan
    hlslcc
  • 原文地址:https://www.cnblogs.com/XiaoRuLiang/p/12422719.html
Copyright © 2011-2022 走看看