• 也谈.net平台的委托扩展篇


    回顾
        
    上一篇主要描述了委托的概念以及.net平台的委托实现,这一边主要描述.net平台针对委托的几个扩展。

    一、 委托推断 
         c#2.0版本中出现了委托推断,给委托传递方法地址时可以使用一种简洁的语法。
         eg:GetAString firstStringMethod = new GetAString(x.ToString); 
               只要用变量 x 把方法名传送给变量 firstStringMethod,就可以编写出作用相同的代码
               GetAString firstStringMethod = x.ToString; 
         *    编译器会用 firstStringMethod 检测需要的委托类型,因此创建 GetAString 委托类型的一个实例,用对象 x 把方法的地址传送给构造函数。 

    二、 匿名方法
         有时候某些方法我们可能只需要在一个地方使用,这时候匿名方法允许我们直接将一个函数体传递给一个委托,从而简化掉了方法声明的步骤(不会提高程序效率)。

    1 delegateTest anonDel = delegate(string param)
    2 {
    3 param += mid;
    4 param += " and this was added to the string.";
    5 return param;
    6 };

        注意事项:
        1. 在匿名方法中不能使用跳转语句跳到该匿名方法的外部,反之亦然:匿名方法外部的跳转语句不能跳到该匿名方法的内部。 
        2. 在匿名方法内部不能访问不安全的代码。另外,也不能访问在匿名方法外部使用的 ref和 out 参数。但可以使用在匿名方法外部定义的其他变量。 
        3. 如果需要用匿名方法多次编写同一个功能,就不要使用匿名方法。而编写一个指定的方法比较好,因为该方法只需编写一次,以后可通过名称引用它。  

    三、 多播委托
         一个委托也可以包含多个方法,这种委托称为多播委托。
        如果调用多播委托,就可以按顺序连续调用多个方法。为此,委托的签名就必须返回 void;否则,就只能得到委托调用的最后一个方法的结果。
        *委托调用方法链的顺序并未正式定义,因此应避免编写依赖于以特定顺序调用方法的代码。

    1 delegate void DoubleOp(double value);
    2
    3  class MainEntryPoint
    4 {
    5 static void Main()
    6 {
    7 DoubleOp operations = MathOperations.MultiplyByTwo;
    8 operations += MathOperations.Square;
    9 //多播委托也可以识别-、-=。
    10 //operations -= MathOperations.Square;
    11 }
    12 }

  • 相关阅读:
    C# linq lambda 分组获取最新的数据
    C# SQLite datetime 时间比较查询
    .net core webApi 上传附件
    ①、Vue学习
    阿里云单片上传、断点续传,上传到指定文件夹下面
    php设计模式之策略模式
    composer安装laravel
    php全局配置
    windows系统安装composer
    php设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/stone_lv/p/2013723.html
Copyright © 2020-2023  润新知