委托和事件

委托:委托是一种数据类型,可以传递方法的数据类型,委托类型的参数可以传递方法,这种类型有我们自定义。

  我们要用委托类型传递的方法的参数和返回值必须和定义的委托类型的对应。

  

  用法:

    1、声明一个委托,使用delegate关键字,返回值为int,参数为int类型

     

 泛型委托

    声明一个泛型委托

    

     泛型委托对应的方法

    

     调用泛型委托

    

 Func和Action系统委托

    .Net 内部已经为我们定义好了两个委托

    1、Action<T>是无返回值的委托,T是参数类型,参数可以有多个

    

    2、Func<T, T1>T是参数类型,T1是返回值类型,参数可以有多个
    

Invoke方法

    Invoke()方法一般指调用方法时使用主线程调用,

    例如解决跨线程访问异常时

    伪代码:

    

 异步委托

    BeginInvoke实际是启用一个线程来调用方法的

    EndInvoke方法检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成
      

      

     BeginInvoke方法触发你的异步方法,它和你想要执行的异步方法有相同的参数。

    另外还有两个可选参数,第一个是AsyncCallback委托是异步完成的回调方法。

    第二个是用户自定义对象,该对象将传递到回调方法中。

    BeginInvoke立即返回并且不等待完成异步的调用(继续执行该下面的代码,不需要等待)。

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

    通过EndInvoke方法检测异步调用的结果。如果异步调用尚未完成,EndInvoke将阻塞调用线程,直到它完成。

 

事件:

    事件提供了一种机制;发布/订阅机制,

    点击一个Button按钮触发一个事件调用一个方法,这个方法类型由委托定义,

    事件就是带event关键字的委托的实例,event可以限制变量被外部调用/直接赋值。

    事件就是委托的实例,所以事件能干的事情,普通的委托实例也都能干。

    只是为了某些场景下,事件规范了使用方法。

    事件只能用过+=来注册方法,只能在方法外部声明在内部调用,

    普通委托实例多用于回调,而事件多用于外部接口

    

 

 



posted @ 2019-11-11 16:55  Jenkin_Tong  阅读(92)  评论(0)    收藏  举报