• 委托学习(3)


    1.1 匿名方法

      在上次我们提到,创建委托实例时都必须明确指定使用的方法。C# 2.0引入了匿名方法,及允许与委托相关联的的代码块以内联方式写入使用委托的位置,从而方便地将代码块直接"绑定"到委托实例。使用匿名方法就可以降代码块直接作为委托的参数,而不需要先定义方法,再将方法作为参数来创建委托。匿名方法还能够对包含它的函数成员的拒不状态进行共享访问,如果要使用具名方法来实现同样的状态共享,就需要将局部变量提升为一个辅助类的字段。

      匿名方法由delegate,可选的参数表和包含{}内的代码块组成。

      delegate(【参数表】)

      {

        【代码块】

      };

      【参数表】:可选

      委托的参数表和返回值都必须与匿名方法相兼容,才能进行从匿名方法到委托类型的隐式转换。

    下面看一个例子:

     1 using System;
     2 
     3 
     4 delegate double Funcation(double x);
     5 
     6 namespace Delegate3
     7 {
     8     class Test
     9     {
    10         public static double[] Apply(double[] a, Funcation f)
    11         {
    12             double[] result = new double[a.Length];
    13             for (int i = 0; i < a.Length; i++)
    14             {
    15                 Console.WriteLine("参数:"+a[i]);
    16                 result[i] = f(a[i]);
    17                 Console.WriteLine("结果:" + result[i]);
    18 
    19             }
    20             return result;
    21         }
    22 
    23         public static double[] MultiplyAllBy(double[] a, double factor)
    24         {
    25             return Apply(
    26                             a,
    27                             delegate(double x)    //声明匿名方法
    28                             {
    29                                   return x * factor;
    30                             }
    31                 );
    32         }
    33     }
    34     class Program
    35     {
    36         static void Main(string[] args)
    37         {
    38             double[] a = { 0.0, 0.5, 1.0 };
    39             double[] squares = Test.Apply(
    40                                         a, delegate(double x)  //匿名方法
    41                                         {
    42                                             return x * x;
    43                                         }
    44                 );
    45             double[] doubles = Test.MultiplyAllBy(a, 2.0);
    46             Console.ReadKey();
    47         }
    48     }
    49 }

    运行结果:

  • 相关阅读:
    基础之实战猜年龄游戏
    基本运算符与if while详解:
    while循环练习:
    常量与格式化输出练习
    Flask基础(05)-->路由的基本定义
    Flask基础(04)-->相关配置参数
    Flask基础(03)-->创建第一个Flask程序
    Flask基础(02)-->搭建Flask项目虚拟环境
    Flask基础(01)-->Flask框架介绍
    Flask实战第61天:帖子板块过滤显示
  • 原文地址:https://www.cnblogs.com/wuzhang/p/wuzhang20140808.html
Copyright © 2020-2023  润新知