• 如何把方法(函数)当参数传递


      方法的参数一般是变量,但在某些情况下需要这个参数是另一个方法,这时就可以参考下面这段代码了。这个例子也很好的说明了委托在实际工作中的应用,代码片段来源于《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只是调用了委托实例封装的方法而已。
    
    

    
    



  • 相关阅读:
    常用地址
    三步搭建Spring Cloud 服务注册
    Java判断两个时间段是否有交集
    CentOS-7下安装docker
    linux 版菱形
    《少林问道》
    Linux下安装Nginx详细图解教程
    测试
    CentOS修改主机名和主机表
    虚拟机中CentOS配置静态网络
  • 原文地址:https://www.cnblogs.com/Excellent/p/1672712.html
Copyright © 2020-2023  润新知