第8章 委托、Lamdba表达式和事件_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 第8章 委托、Lamdba表达式和事件

第8章 委托、Lamdba表达式和事件

 2013/8/26 14:58:54  终究不过一场空  博客园  我要评论(0)
  • 摘要:本章内容:委托Lambda表达式事件8.1.3简单的委托示例首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作。publicclassMathOperations{publicstaticdoubleMultiplyByTwo(doublevalue){returnvalue*2;}publicstaticdoubleSquare(doublevalue){returnvalue*value;}
  • 标签:事件 DBA AMD 表达式

本章内容:

8.1.3   简单的委托示例

 

首先定义一个类MathOperations,它有两个静态方法,对double类型的值执行两个操作。  

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

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

下面使用自定义的委托调用这两个方法

internal delegate double DoubleOp(double x);

 

private static void Main()
{
    DoubleOp[] operations =
    {
         MathOperations.MultiplyByTwo,
         MathOperations.Square
   };
   for (var 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.141);
      Console.WriteLine();
    }
  Console.ReadLine();
}
private static void ProcessAndDisplayNumber(DoubleOp action, double value) { var result = action(value); Console.WriteLine("Value is {0},result of operation is {1}", value, result); }

运行这个示例,得到如下所示的代码:

 

 

8.1.4  Action<T>和Func<T>委托

 

  除了自定义的委托类型外,我们还可以使用Action<T>委托和Func<T>委托。

  泛型Action<T>委托表示引用一个void返回类型的方法,因为这个委托类存在不同的变体,所以可以传递至多16种不同的参数类型,没有泛型参数的Action类可调用

没有参数的方法。

  Func<T>允许调用带返回类型的方法,与Action<T>类似,Func<T>也定义了不同的变体,至多也可以传递16个参数类型和一个返回类型。Func<out TResult>

委托类型可以调用带返回类型且无参数的方法。

  

  理解了这两个委托后,我们就可以将上一节种定义的DoubleOp委托删除,改为Func<T>委托,如下所示:  

Func<double,double> [] operations =
{
    MathOperations.MultiplyByTwo,
    MathOperations.Square
};

  然后修改ProcessAndDisplayNumber方法的第一个参数类型,如下所示:

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

 

发表评论
用户名: 匿名