• C#中的委托 delegate


    委托 也叫代表,代表一类方法。而这一类方法都具有相同的 修饰符、形参以及 返回值类型

    1. 委托 既是方法,声明委托的方式如下:在修饰符后加上 delegate ['dɛlɪɡət]关键字

    1 public delegate void Del(string message);

    从格式上看,它与方法的声明极为相似,就是多了个 delegate关键字而已。它表示声明了一类,修饰符为public、一个string类型形参的、没有返回值的方法。

    2. 但 委托 不是普通的方法,因为 它也是类, 所以委托只能声明,而不能定义,如不能这样写:

     private delegate void Doing(string name){
          System.Windows.MessageBox.Show();
    }

    3. 实例化委托,调用委托

     1 //声明一个void, 形参是string的委托
     2 public delegate void Del(string name);
     3  
     4 //定义一个cut方法
     5 public void cut(string name)
     6 {
     7        System.Windows.MessageBox.Show("fuck " + name);
     8 }
     9 //实例化委托,传的参数是一个方法的名字,这里是cut
    10 Del a = new Del(cut);
    11 a("CCC");//调用委托,相当于调用cut("CCC");

    4. 委托 有什么用,搞这么复杂有什么意思

    将方法名作为方法参数传递,提高代码的多变性和灵活性; 委托 主要用于事件 还有回调函数中····

    5.  委托 的多播 (Multicasting of a Delegate) 操作"+="、"-="

     1 using System;
     2  
     3 delegate int NumberChanger(int n);
     4 namespace DelegateAppl
     5 {
     6    class TestDelegate
     7    {
     8       static int num = 10;
     9       public static int AddNum(int p)
    10       {
    11          num += p;
    12          return num;
    13       }
    14  
    15       public static int MultNum(int q)
    16       {
    17          num *= q;
    18          return num;
    19       }
    20       public static int getNum()
    21       {
    22          return num;
    23       }
    24  
    25       static void Main(string[] args)
    26       {
    27          // 创建委托实例
    28          NumberChanger nc;
    29          NumberChanger nc1 = new NumberChanger(AddNum);
    30          NumberChanger nc2 = new NumberChanger(MultNum);
    31          nc = nc1;
    32          nc += nc2;//到这里,nc其实绑定了2个委托,调用时会按绑定的顺序执行
    33          // 调用多播
    34          nc(5);
    35          Console.WriteLine("Value of Num: {0}", getNum());
    36          Console.ReadKey();
    37       }
    38    }
    39 }

    注意:委托对象可使用 "+=" 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。

                                   "-=" 运算符可用于从合并的委托中移除组件委托。

    *****************************************************
    *** No matter how far you go, looking back is also necessary. ***
    *****************************************************
  • 相关阅读:
    Openlayers2中vector扩展FeatureLayer
    点图层叠加与事件响应
    geoserver服务wfs之GetFeature
    Echart在Openlayers的应用-航班的炫光特效
    Echart在Openlayers的应用-热力图
    Echart在Openlayers的应用
    WMS图例展示
    Java新手锻炼
    Java动手又动脑
    java递归问题小程序
  • 原文地址:https://www.cnblogs.com/gangle/p/9212426.html
Copyright © 2020-2023  润新知