学习笔记: 委托解析和封装,事件及应用
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
学习笔记: 委托解析和封装,事件及应用相关推荐
- jquery学习笔记及常用函数封装
二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...
- 软件调试学习笔记(二)—— 调试事件的采集
软件调试学习笔记(二)-- 调试事件的采集 要点回顾 调试事件的种类 调试事件采集函数 例:分析PspUserThreadStartup 例:分析PspExitThread 总结 要点回顾 调试器与被 ...
- Unity游戏框架学习笔记——03基于观察者模式的事件中心
Unity游戏框架学习笔记--03基于观察者模式的事件中心 基于观察者模式的事件中心 一如既往指路牌:https://www.bilibili.com/video/BV1C441117wU?p=5. ...
- 软件调试学习笔记(三)—— 调试事件的处理
软件调试学习笔记(三)-- 调试事件的处理 要点回顾 调试事件的处理 实验一:实现简单调试器(创建进程) 实验二:分析异常来源 实验三:实现简单调试器(附加进程) 实验四:分析NtDebugActiv ...
- jQuery学习笔记之DOM操作、事件绑定(2)
jQuery学习笔记之DOM操作.事件绑定(2) --------------------学习目录------------------------ 4.DOM操作 5.事件绑定 源码地址: https ...
- GB28181学习笔记6 解析invite命令
GB28181学习笔记6 解析invite命令 一.信令流程 1. 实时信令流程 点播流程: 上级平台向下级发送INVITE请求,请求实时视频 下级平台回复200OK 上级平台回复ACK确认 关闭视频 ...
- libevent学习笔记六:libevent核心事件event
libevent学习笔记六:libevent核心事件event 前面对reactor模式.事件处理流程.libevent源代码结构等有了高层的认识后,接下来将详细介绍libevent的核心结构even ...
- C#学习笔记——委托机制
什么是委托?委托仅仅是函数指针,那就是说,它能够引用函数,通过传递地址的机制完成.委托是一个类,当你对它实例化时,要提供一个引用函数,将其作为它构造函数的参数.委托具有以下特点:1)委托类似于 C++ ...
- Vue学习笔记05 组件的自定义事件-组件通信-$nextTick-脚手架解决ajax跨域-插槽-过渡动画
文章目录 Vue学习笔记05 父组件给子组件传值 注意点 子组件给父组件传值 父组件接受子组件的传值 通过函数 组件的自定义事件 事件绑定的第一种写法 @或v-on 事件绑定的第二种写法:使用ref ...
- 学习笔记之——Event Camera(事件相机)调研
本博文是本人调研Event Camera写下的学习记录,本博文的内容来源于网络.paper以及本人学习调研过程的心得,仅供本人学习记录用,不作商业用途. 我们团队在事件相机方面的工作请见: GitHu ...
最新文章
- 【Qt】获取、比较Qt版本的宏和函数
- GetFileAttributesEx读取文件相应属性
- 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
- 数据库开发——MySQL——慢查询优化
- Python机器学习库sklearn的安装
- esp8266舵机驱动_arduino开发ESP8266学习笔记四—–舵机
- mac下antlr4命令使用
- 合成谬误与公地悲剧(为何设置产品总监职位及核算名义成本)
- [Linux命令]dd
- Unity热更新学习(二) —— ToLua c#与lua的相互调用
- pandas折线图x轴显示不全_python - 为什么在Geopandas中显示折线图时会忽略绘图顺序 - 堆栈内存溢出...
- 移动硬盘插入电脑后不显示盘符
- 如何更改QQ截图的快捷键
- 学计算机物理去戴维斯还是伦斯勒理工学院好,美国大学本科专业排名:应用物理...
- 作为老师的一些思考(二)
- 中国好同事!帮程序猿跟姑娘表白,他们组了一支乐队
- d3.js使用svg制作图标
- vulnhub靶场,bulldog1
- MA均线指标详解、价托、量托
- xp系统服务器的ip地址怎么查,xp怎么配置ip地址|xp系统怎么样查看自己的ip地址...