C#高级编程(第8版)——委托声明、使用(第二节)

      简单的委托示例

    在这个示例中,定义一个类MathsOperations,它有两个静态方法,对double类型的值执行两个操作,然后使用该委托,调用这些方法。这个数学类如下所示:

       

class MathOperations
  {
    public static double MultiplyByTwo(double value)
    {
      return value * 2;
    }

    public static double Square(double value)
    {
      return value * value;
    }
  }

 

  下面调用这些方法:

 

using System;

namespace Wrox.ProCSharp.Delegates
{
  delegate double DoubleOp(double x);

  class Program
  {
    static void Main()
    {
      DoubleOp[] operations =
      {
        MathOperations.MultiplyByTwo,
        MathOperations.Square
      };

      for (int i = 0; i < operations.Length; i++)
      {
        Console.WriteLine("Using operations[{0}]:", i);
        ProcessAndDisplayNumber(operations[i], 2.0);
        ProcessAndDisplayNumber(operations[i], 7.94);
        ProcessAndDisplayNumber(operations[i], 1.414);
        Console.WriteLine();
      }
    }

    static void ProcessAndDisplayNumber(DoubleOp action, double value)
    {
      double result = action(value);
      Console.WriteLine(
         "Value is {0}, result of operation is {1}", value, result);
    }
  }

}

  

   在上面的代码中,实例化了一个委托数组DoubleOp(记住,一旦定义了委托类,基本上就可以实例化它的实例,就像处理一般的类那样____所以把一些委托的实例放在数组中是可以的)。该数组的每个元素都初始化为由MathsOprations类实现的不同操作。然后遍历这个数组,把每个操作应用到3个不同的值上。这说明了使用委托的一种方式___把方法组合到一个数组中来使用,这样就可以在循环中调用不同的方法了。

      这段代码的关键一行是把每个委托传递给ProcessAndDisplayNumber()方法,例如:

    

      ProcessAndDisplayNumber(oprations[i],2.0);

 其中传递了委托名,但不带任何参数。假定oprations[i]是一个委托,其语法是:

    、oprations[i]表示“这个委托”。换言之,就是委托表示的方法。

    、oprations[i](2.0)表示“实际上调用这个方法,参数放在圆括号中“。

  ProcessAndDisplayNumber()方法定义为把一个委托作为第一个参数:

           

  static void ProcessAndDisplayNumber(DoubleOp action,double value);

  然后,在这个方法中,调用:

    double result=action(value);

  但实际上市调用action委托实例封装的方法,其返回结果存储在result中。运行这个示例,得到如下所示的结果:

SimpleDelegate
Using oprations[0]:
  Value is 2, resutl of opration is 4
  Value is 7.94, result  of opration is 15.88
  Value  is 1.414, result of opration is 2.828

Using oprations[1]:
   Value is 2,result of opration is 4
   Value is  7.94, result of opration is  63.0436
   Value is  1.414, result of opration is 1.999396

  

 

 

posted @ 2014-06-29 21:57  hauf  Views(157)  Comments(0)    收藏  举报