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");
       */
     }
    }
    
    

  • 相关阅读:
    input.file上传图片| FileReader h5新特性
    lua的luasocket程序
    nginx的proxy_set_header
    lua的table.sort
    lua的深拷贝和浅拷贝
    nginx的location匹配
    kong后台接口
    一些程序和工具
    lua的模式匹配
    php的一些语法
  • 原文地址:https://www.cnblogs.com/lhard/p/2137375.html
Copyright © 2011-2022 走看看