C#委托理解(1)

# 委托 #
## 1、理解 ##
(1)委托类型用于定义和相应应用程序中的回调;
(2)使用回调,程序员可以使一个函数 返回报告给(即回调)另一个函数;
(3)委托是类型安全的对象,它指向程序中另一个以后会被调用的的方法。
## 2、定义委托 ##
(1)**使用delegate关键字
    如:public delegate int XXX(int a,int b);
     //定义了一个(可以指向任意方法)、
     //(返回一个int类型返回值)、
     //(接收两个int类型输入参数)的委托类型。  
(2)当C#编译器处理委托类型时,将自动产生一个继承自System.MulticastDelegate的 **密封类XXX**以维护以后将要调用方法的列表。
(3)密封类XXX定义了三个公共方法:
    public sealed class XXX : System.MulticastDelegate
    {
      //以同步方式调用委托对象维护的每个方法
      public int Invoke(int a,int b);

      //以异步方式开始调用委托对象维护的每个方法
      public IAsyncResult BeginInvoke(int a,int b,asyncCallback cb,object state);

      //以异步方式结束调用委托对象维护的每个方法
      public int EndInvoke(IAsyncResult result);
    }
## 3、委托实例 ##
    //定义部分
    public delegate int XXX(int a,int b);
    public int Add(int x,int y)
    {
      return x + y;
    }
    //以下是控制台Main方法中的内容
    XXX d = new XXX(Add);
    Console.writeLine(d(10,11));
    //控制台显示结果
    21

说明:实际上d(10,11)实际上在内存中调用了Invoke()方法

# 4、泛型委托:Action<>和Func<> #
## 使用委托的三个步骤: ##
    1、自定义与方法Add匹配的委托XXX
    2、创建委托的实例:XXX d = new XXX(Add);
    3、调用委托对象的Invoke()方法来间接调用Add方法
## 使用Action<>委托: ##
    1、创建委托的实例:Action<int,int> d = new Action<int,int>(Add);
    2、调用委托对象的Invoke()方法来间接调用Add方法
缺点:Action<int,int>只能指向void返回值的方法
## 使用Func<>委托: ##
优点:相比Action<>,Func<>同时能指向void返回值的方法;Func<>的最后一个参数总是方法的返回值。
    
    1、创建委托的实例:
      Func<int,int,int> d = new Func<int,int,int>(Add);
    2、调用委托对象的Invoke()方法来间接调用Add方法:

猜你喜欢

转载自blog.csdn.net/qq_34520411/article/details/79627140