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()以及赋值,当然委托也是可以允许的。

    第一幅图:

    第二幅图:

  • 相关阅读:
    vue之实现日历----显示农历,滚动日历监听年月改变
    vue填坑之全局引入less,scss,styl文件
    vue填坑之引入iconfont字体图标
    纯JS实现带小圆点缩略图及左右箭头的轮播图
    canvas绘制时钟
    CSS实现鼠标移入图片边框有小三角
    jquery之.outerWidth()
    CSS ::selection 选中文字效果
    LINUX下用Nginx和Node.js构建一个简单的项目(4)
    LINUX下用Nginx和Node.js构建一个简单的项目(3)
  • 原文地址:https://www.cnblogs.com/zmztya/p/6863131.html
Copyright © 2011-2022 走看看