zoukankan      html  css  js  c++  java
  • C#委托

    委托(delegate)


    委托声明定义了一种类型,它用一组特定的参数以及返回类型来封闭方法。对于静态方法,委托对象
    封装要调用的方法。对于实例方法,委托对象同时封闭一个实例和该实例上的一个方法。如果您有一
    个委托对象和一组适当的参数,则可以用这些参数调用该委托。

    委托提供了类似于c++中函数指针的功能,简单的说委托类型就是面向对象函数指针。
    不过c++的函数指针只能指向静态的方法,而委托除了可以指向一个静态的函数方法外,还可以指
    向对象的实例的方法。而最大的差异在于委托是完全的面向对象,且使用安全的类型,另外委托允许程序员在程序执行时传入
    方法的名称,动态的决定预调用的方法。如此的弹性更能让程序员随心所欲的发挥。

    委托的本质是一个类,任何可以声明类的地方都可以使用委托。

    委托的使用举例

    using System;
    delegate void EatDelegate(string food);//委托的声明,返回值及形参要与所指向的函数对应
    class MyDelegate
    {
     static void zsEat(string food)
     {
      Console.WriteLine("zs eat "+food);
     }
     static void lsEat(string food)
     {
      Console.WriteLine("ls eat "+food);
     }
     static void wwEat(string food)
     {
      Console.WriteLine("ww eat "+food);
     }
     static void Main()
     {
      EatDelegate zs=new EatDelegate(zsEat);
      EatDelegate ls=new EatDelegate(lsEat);
      EatDelegate ww=new EatDelegate(wwEat);
      //方法一
      zs("apple");
      Console.WriteLine("--------------");
      //方法二
      EatDelegate eatChain;
      eatChain=zs+ls+ww;
      eatChain("orange");
      Console.WriteLine("--------------");
      //方法三
      eatChain-=zs;//??zs???
      eatChain("banana");
      Console.WriteLine("--------------");
      //方法四
      eatChain+=zs;//???zs???
      eatChain("banana");
      Console.WriteLine("--------------");
      //方法五,匿名方法
      /*
       * EatDelegate eatChain=null;
       * eatChain+=delegate(string food){console.writeLine("zs eat "+food);};
       * eatChain("pear");
       */
     }
    }
    
    

  • 相关阅读:
    逻辑回归&线性支持向量机
    回归算法比较【线性回归,Ridge回归,Lasso回归】
    K邻近回归算法
    matplotlib正弦和余弦图
    matplotlib箱线图与柱状图比较
    查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响
    K邻近分类算法
    软件设计师考试18年上半年上午考试真题及解析(一)
    Solr高级搜索【自动建议】
    Solr高级搜索【拼写检查】
  • 原文地址:https://www.cnblogs.com/lhard/p/2137375.html
Copyright © 2011-2022 走看看