zoukankan      html  css  js  c++  java
  • 如何把方法(函数)当参数传递

      方法的参数一般是变量,但在某些情况下需要这个参数是另一个方法,这时就可以参考下面这段代码了。这个例子也很好的说明了委托在实际工作中的应用,代码片段来源于《C#高级编程第6版》随书的示例代码。

    示例代码
    1 using System;
    2
    3  namespace Wrox.ProCSharp.Delegates
    4 {
    5 class MathOperations
    6 {
    7 public static double MultiplyByTwo(double value)
    8 {
    9 return value * 2;
    10 }
    11
    12 public static double Square(double value)
    13 {
    14 return value * value;
    15 }
    16 }
    17
    18
    19 delegate double DoubleOp(double x);
    20
    21 class MainEntryPoint
    22 {
    23 static void Main()
    24 {
    25 DoubleOp[] operations =
    26 {
    27 MathOperations.MultiplyByTwo,
    28 MathOperations.Square
    29 //new DoubleOp(MathOperations.MultiplyByTwo),
    30 //new DoubleOp(MathOperations.Square)
    31   };
    32
    33 for (int i = 0; i < operations.Length; i++)
    34 {
    35 Console.WriteLine("Using operations[{0}]:", i);
    36 ProcessAndDisplayNumber(operations[i], 2.0);
    37 ProcessAndDisplayNumber(operations[i], 7.94);
    38 ProcessAndDisplayNumber(operations[i], 1.414);
    39 Console.WriteLine();
    40 }
    41 Console.ReadLine();
    42 }
    43
    44 static void ProcessAndDisplayNumber(DoubleOp action, double value)
    45 {
    46 double result = action(value);
    47 Console.WriteLine(
    48 "Value is {0}, result of operation is {1}", value, result);
    49 }
    50 }
    51 }
    52  
    第19行定义了一个代理类型,第25行实例化了代理类型,第29、30行的注释表示完整的实例化的方式(可以替换掉27、28两行)。

    36   ProcessAndDisplayNumber(operations[i],
    2.0);
    这行就是重点了,调用
    ProcessAndDisplayNumber方法,其中的第一个参数operations[i]就是委托类型,用来实现将方法作为一个参数来传递。

    46  double result = action(value);
    这里的action只是调用了委托实例封装的方法而已。
    
    

    
    



  • 相关阅读:
    SpringBoot和SpringCould的关系
    MyBatis全局配置文件头
    MyBatis的SQL映射文件头
    MyBatis 驼峰式配置 yml配置
    频率组件
    序列化和反序列化
    生成器面试题
    序列化组件
    进程间通信IPC机制
    信号量、event事件和线程queue
  • 原文地址:https://www.cnblogs.com/Excellent/p/1672712.html
Copyright © 2011-2022 走看看