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类,事件是“小明”实例

  • 相关阅读:
    Linux mysql 远程访问
    Linux下高并发socket最大连接数所受的各种限制
    Linux之gunzip命令
    不停在终端中报log
    FIO测试
    yum是什么?(linux命令)
    ubuntu grub 登录
    百度网盘命令行方式,解决ubuntu16.04百度网盘无法运行的问题
    excel使用经验汇总
    ubuntu 安装 ipfs 经验
  • 原文地址:https://www.cnblogs.com/dfcq/p/13024766.html
Copyright © 2011-2022 走看看