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

    第一幅图:

    第二幅图:

  • 相关阅读:
    IM,游戏服务端 tcp 框架整理
    IronPython初体验和实战集合等类型转换和类型匹配
    C# 控件包
    ORM框架系列
    C# Excel或表格插件
    vue之修饰符
    vue之单表输入绑定
    vue之计算属性和侦听器
    vue之指令系统
    vue之用法
  • 原文地址:https://www.cnblogs.com/zmztya/p/6863131.html
Copyright © 2011-2022 走看看