zoukankan      html  css  js  c++  java
  • c#进阶之Delegate

    委托是什么?答:委托是一种类型   等同与 一个class类,继承System.MulticastDelegate,但mult....gate是一个特殊类,不能够派生

    委托的调用,如何去使用

    1/委托名.Invoke();

    2/委托名();

    3/委托名.BeginInvoke(null,null);

    3.调用的方法与委托的参数签名一致

    为什么需要委托,为什么会有委托?

    答:1.例如 需要造一个车,其他的都一样,只是发动机不同,那么发送机很复杂,那么我们可以将发送机外包出去,我们只需要调用创造发动机的方法就可以了,这里就可以用委托

     2.可以解耦

    看一下下图,那么通过+=是怎么执行的?-=是怎么执行的?

        1.+=是一个一个按照顺序执行

        2.-=是从后往前进行匹配,找到第一个吻合的就移除,且只移除一个,找不到也不会异常。若是匿名方法,那么通过-=也不会被删除

            同样的,若是写成 new Stuent().Study;那么通过-=也不会被删除。

        3.有一个限制:如用-=,那么必须保证 是用一个实例同一个方法。

    什么是多播委托?

    1.第一种:通过遍历.(可以把beginInvoke修改为invoke也可以)

    2.+=,-=都算是多播委托

    委托主要用于观察者模式?

    答:是的。

     事件是一种委托么?

    答:是的。

    如何定义一个事件?

     如何使用事件?

    答:因为是委托,所以和原来一样去使用和调用。

    委托和事件的区别是什么?有什么联系?

    1、事件是一个委托的实例,委托是一种类型

    2、事件,控制了实例的使用权限,更加安全。

    为什么要用事件?事件有什么用呢?

    从第一幅图可以看到 在外部(另一类文件)事件可以Invoke()以及赋值。但是事件是不被允许的。

    从第二幅图可以看到 在内部(同一类文件)事件可以Invoke()以及赋值,当然委托也是可以允许的。

    第一幅图:

    第二幅图:

  • 相关阅读:
    暂停公告
    【laravel】Laravel 5 TokenMismatchException on PHP 5.6.9
    【laravel】laravel class 里面定义以head开头的方法会报错
    【kindle】【转发】kindle链接WIFI自动断开问题
    【js】window.onscroll 无效问题
    【js】【转发】jreturn;、return true、return false;区别
    【js】【vue】获取当前dom层
    【js】input 焦点到内容的最后
    【jquery】 选中复选框 和 return false 的影响
    【jquery】 form ajaxSubmit 问题
  • 原文地址:https://www.cnblogs.com/zmztya/p/6863131.html
Copyright © 2011-2022 走看看