委托

委托是什么?

  使用委托可以将方法变成参数传递.委托是一种特殊类型的对象,其特殊之处在于委托中包含的只是一个活多个方法的地址,而不是数据。

委托本质上是一个class.继承自:system.MulticastDelegate

Invoke(); 相当于把方法执行了一遍

BeginInvoke(); 启动线程

触发你的异步方法,它和你想要执行的异步方法有相同的参数。另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。第二个是用户自定义对象,该对象将传递到回调方法中。BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。

EndInvoke(); 等待线程的结束

BeginInvoke返回IAsyncResult接口,可用于检测异步调用的过程。

检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。EndInvoke参数包括out和ref参数。

不管怎么么样,调用了beginInvoke ,就必须调用endInvoke 结束异步,

 

为什么需要委托?

  逻辑解耦,代码复用,多线程必备

委托声明

  1. delegate   至少0个参,之多32个参,可以有返回也可以没有

public delegate void methodDelegate(); // 无参,无返回
public delegate int methodIntDelegate(); // 无参,有返回
public delegate string methodStrDelegate(int type, string name); // 有参,有返回

  2. action 无返回的泛型委托, 至少0个参,之多16个参,无返回值

action <int,string> 参数:int,string,无返回

  3.Func 有返回值的泛型委托 至少0个参,之多16个参,必须有返回值

func<string> //返回为string

func<string,int>//返回int

  4. predicate 返回bool型的泛型委托, 有且只有一个参数,返回固定为bool

predicate<string> // 入参string,返参bool

  

posted @ 2019-04-16 16:16  别往风里吐口水  阅读(140)  评论(0编辑  收藏  举报