1. 委托的本质: 是一个类, 继承自 System.MulticastDelegate 里面内置了几个方法

Noreturn委托 编译后的IL

1. 多播委托的 举例

//猫叫一声 触发一系列后续动作
        //多个 指定动作 正式不稳定原因, 封装出去 甩锅

public class Cat
     {
         public int MyProperty { get; set; }
         public void Miao()
         {
             Console.WriteLine("{0} miao", this.GetType().Name);

new Mouse().Run();
             new Baby().Cry();
             new Dog().Wang();
         }

//猫叫一声 触发一系列后续动作
         //多个 指定动作 正式不稳定原因, 封装出去 甩锅

public void MiaoNew(MiaoDelegate miaoDelegate)
         {
             Console.WriteLine("{0} MiaoNew", this.GetType().Name);

if (miaoDelegate != null)
                 miaoDelegate.Invoke();
         }
     }

public delegate void MiaoDelegate();
     class Mouse
     {
         public void Run()
         {
             Console.WriteLine("{0} run", this.GetType().Name);
         }
     }

class Baby
     {
         public void Cry()
         {
             Console.WriteLine("{0} cry", this.GetType().Name);
         }
     }

class Dog
     {
         public void Wang()
         {
             Console.WriteLine("{0} Wang", this.GetType().Name);
         }
     }

static void Main(string[] args)
{

Cat cat = new Cat();
     cat.Miao();

var miaoDelegate = new MiaoDelegate(new Mouse().Run);
     miaoDelegate += new MiaoDelegate(new Baby().Cry);
     miaoDelegate += new MiaoDelegate(new Baby().Cry);
     miaoDelegate += new MiaoDelegate(new Dog().Wang);

cat.MiaoNew(miaoDelegate);
}

2. 对事件的理解

事件 : 带有event关键字的委托的实例, event可以限制变量被 外部调用/直接赋值

ChildClass:Cat 也不可以对cat中的 event进行操作

从 IL中可以看出  委托实例是public字段, 而事件是 private字段, 自然外部不可调用了

委托和事件的区别与联系?

委托的本质 是类, 就是一个类型,比如 Student类

事件 是委托类型的一个实例 比如 同学A 是student的一个实例

事件: 可以吧一堆可变的动作/行为 封装出去, 交给外部制定, 预定义一样,

程序设计时候, 可以把程序分为2部分, 固有部分写死, 不固定部分开放接口,外部可随意扩展

框架: 完成固定/通用部分, 把可变部分留出扩展点, 支持自定义

转载于:https://www.cnblogs.com/xtxtx/p/9149508.html

学习笔记: 委托解析和封装,事件及应用相关推荐

  1. jquery学习笔记及常用函数封装

    二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...

  2. 软件调试学习笔记(二)—— 调试事件的采集

    软件调试学习笔记(二)-- 调试事件的采集 要点回顾 调试事件的种类 调试事件采集函数 例:分析PspUserThreadStartup 例:分析PspExitThread 总结 要点回顾 调试器与被 ...

  3. Unity游戏框架学习笔记——03基于观察者模式的事件中心

    Unity游戏框架学习笔记--03基于观察者模式的事件中心 基于观察者模式的事件中心 一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5. ...

  4. 软件调试学习笔记(三)—— 调试事件的处理

    软件调试学习笔记(三)-- 调试事件的处理 要点回顾 调试事件的处理 实验一:实现简单调试器(创建进程) 实验二:分析异常来源 实验三:实现简单调试器(附加进程) 实验四:分析NtDebugActiv ...

  5. jQuery学习笔记之DOM操作、事件绑定(2)

    jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...

  6. GB28181学习笔记6 解析invite命令

    GB28181学习笔记6 解析invite命令 一.信令流程 1. 实时信令流程 点播流程: 上级平台向下级发送INVITE请求,请求实时视频 下级平台回复200OK 上级平台回复ACK确认 关闭视频 ...

  7. libevent学习笔记六:libevent核心事件event

    libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...

  8. C#学习笔记——委托机制

    什么是委托?委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数.委托具有以下特点:1)委托类似于 C++ ...

  9. Vue学习笔记05 组件的自定义事件-组件通信-$nextTick-脚手架解决ajax跨域-插槽-过渡动画

    文章目录 Vue学习笔记05 父组件给子组件传值 注意点 子组件给父组件传值 父组件接受子组件的传值 通过函数 组件的自定义事件 事件绑定的第一种写法 @或v-on 事件绑定的第二种写法:使用ref ...

  10. 学习笔记之——Event Camera(事件相机)调研

    本博文是本人调研Event Camera写下的学习记录,本博文的内容来源于网络.paper以及本人学习调研过程的心得,仅供本人学习记录用,不作商业用途. 我们团队在事件相机方面的工作请见: GitHu ...

最新文章

  1. 【Qt】获取、比较Qt版本的宏和函数
  2. GetFileAttributesEx读取文件相应属性
  3. 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
  4. 数据库开发——MySQL——慢查询优化
  5. Python机器学习库sklearn的安装
  6. esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
  7. mac下antlr4命令使用
  8. 合成谬误与公地悲剧(为何设置产品总监职位及核算名义成本)
  9. [Linux命令]dd
  10. Unity热更新学习(二) —— ToLua c#与lua的相互调用
  11. pandas折线图x轴显示不全_python - 为什么在Geopandas中显示折线图时会忽略绘图顺序 - 堆栈内存溢出...
  12. 移动硬盘插入电脑后不显示盘符
  13. 如何更改QQ截图的快捷键
  14. 学计算机物理去戴维斯还是伦斯勒理工学院好,美国大学本科专业排名:应用物理...
  15. 作为老师的一些思考(二)
  16. 中国好同事!帮程序猿跟姑娘表白,他们组了一支乐队
  17. d3.js使用svg制作图标
  18. vulnhub靶场,bulldog1
  19. MA均线指标详解、价托、量托
  20. xp系统服务器的ip地址怎么查,xp怎么配置ip地址|xp系统怎么样查看自己的ip地址...

热门文章

  1. 2019最新资料!共7T
  2. 印度首颗 CPU 横空出世:软件开发已开动
  3. 3分钟看懂 Linux 磁盘划分
  4. 过滤Filtering
  5. linux中级之keepalived概念
  6. 服务端Latex解析成图片或者HTML或者SVG方案
  7. SQL数据库“单个用户”不能访问,设置为多个用户的解决方法
  8. 007-JQuery 筛选
  9. mysql cluster推荐配置
  10. 01.使用File类读写文件