委托

1.什么是委托?

个人理解:委托就是把一个方法当做参数传入另一个方法中进行调用。 (委托的实质就是一个类,可以通过中间语言IL编译工具去查看源码)

2.委托的使用?

使用委托三部曲:(1)、委托的声明 。     (2)、委托的实例化。     (3)调用。

3.委托的种类?

(1).delegate             (2).泛型委托 Func/ Action          (3). event 和观察者模式   

通过delegate 关键字来声明委托 举例:

1  public delegate void NoReturnNoPara(); // 无参数、无返回值的委托声明  
2  public delegate void NoReturnWithPara(int x, int y);//1 声明委托
3  public delegate int WithReturnNoPara(); //无参数、int类型返回值委托声明
4  public delegate MyDelegate WithReturnWithPara(out int x, ref int y);//自定义委托类
1   private void DoNothing()  //无参数无返回值的方法
2  {
3    Console.WriteLine("This is DoNothing 。。。。");
4  }
1  NoReturnNoPara method = new NoReturnNoPara(this.DoNothing);// this表示是当前类的方法,也可以把方法拆分到其他类中。这里是为了使用方便。
2   //2 委托的实例化  要求传递一个参数类型 返回值都跟委托一致的方法,
3  method.Invoke();//3委托实例的调用  参数和委托约束的一致

      上述三段代码,第一段是委托类型的声明; 第二段代码是为实例化委托做准备,通过实例化委托将DoNothing方法作为参数传入到委托中;第三段代码是最后调用DoNothing方法,执行DoNothing中的业务逻辑。注意:委托声明、委托的实例化 要求传递一个参数类型 返回值都跟委托一致的方法,委托实例的调用 参数和委托约束的一致。

 

Action Func  .NetFramework3.0出现的

Action 系统提供  0到16个泛型参数  不带返回值  委托

1    //Action action = new Action(this.DoNothing);
2     Action action0 = this.DoNothing;//是个语法糖,就是编译器帮我们添加上new Action
3     action0.Invoke();  

在这里的action0.invoke()和上述 method.Invoke() 执行的结果是一致的。这里推荐使用泛型委托。

Func 委托: 无参数int类型返回值

1  public int Get()
2 {
3    return 1;
4  }
5 
6    //Func 系统提供  0到16个泛型参数  带泛型返回值  委托
7   Func<int> func0 = this.Get;
8   int iResult = func0.Invoke();

 带参数有返回值的Func委托  int类型参数,字符串类型的返回值 

1   private string ToString(int i)
2   {
3     return i.ToString();
4   }
5   Func<int, string> func1 = this.ToString; //第一个是参数类型 ,第二个是返回值类型
6   func1.Invoke(0); 

 

版权声明:本文为super-xi-xi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/super-xi-xi/p/10215569.html