zoukankan      html  css  js  c++  java
  • C# 委托/事件本质详解

    委托

    一.什么是委托

    IL层面
    1>委托的本质就是一个类
    2>继承自System.MulticastDelegate
    3>委托里面内置了3个方法:Invoke(),BeginInvoke(),EndInvoke()

    二.委托的三个步骤
    1>public delegate void MyDelegate();//1.委托的声明
    2>MyDelegate myDelegate = new MyDelegate(DoSomething);//2.委托的实例化(构造函数传方法)
    3>myDelegate.Invoke();//3.实例调用(Invok调用),这里等于执行了这个方法
    myDelegate();//3.直接调用也和上面一行代码是一样的

    三.委托的3大意义
    1>解耦:
    -好处是减少重复代码;
    -解耦是解除了判断逻辑和共用逻辑之间的耦合;
    -委托传递的是逻辑(逻辑就是方法);
    2>异步多线程
    3>多播委托
    -+=为委托实例按顺序增加方法,形成方法链,Invok()时按顺序执行
    --=为委托实例移除方法,从方法链的尾部开始匹配,遇到第一个完全吻合的移除,且只移除一个;没有的也不异常
    -多播委托带返回值,结果以最后的为准
    -价值:一个变量保存多个方法,可以增减方法;Invok时候可顺序执行

    事件

    一.什么是事件
    1>说白了,就是带event关键字的委托实例
    2>事件可以限制变量外部调用,或者直接赋值
    3>事件可以把一堆的动作或行为,封装出去,交给第三方指定
    4>程序设计时候:
    -固定部分,可以写死
    -不固定部分,通过一个事件去开放接口,外部可以扩展动作

    二.委托和事件的区别和联系
    1>委托是一个类型,一个类,事件是委托的实例
    2>比如委托时一个Student类,事件是“小明”实例

  • 相关阅读:
    Python 进度条
    python多线程的使用
    Python 进程间通信问题—Manager方法
    生产消费者模型(进程通信,队列)
    进程锁 购票问题
    多进程并行实现socket并发代码
    一次完整的socket文件的传输
    python实现基本计算器(可处理括号和负值)
    模拟论坛登录
    JS
  • 原文地址:https://www.cnblogs.com/dfcq/p/13024766.html
Copyright © 2011-2022 走看看