读书笔记 C#事件event浅析(一)
在C#中,所谓event事件,就是一种特殊的委托。如果要声明事件,首先就要声明一个相对应的委托类型。按照流程来说,事件相当于委托类型往上升了一级似的,我是这样认为的。
//1.先声明委托类型
public delegate void MethodDel(string param);
//2.再次声明事件
public event MethodDel DoEvent;
event事件是一种特殊的多播委托,它可以用+=来新增方法引用,也可以用-=移除方法引用。
//用lambda表达式 附加
p.DoEvent += param => { Console.WriteLine(param); }; //用匿名函数 附加
p.DoEvent += delegate(string param) { Console.WriteLine(param); }; //用自定义方法 附加
p.DoEvent += Print; //移除Print方法
p.DoEvent -= Print; public static void Print(string param) {
Console.WriteLine(param);
}
在用匿名函数或lambda表达式附加方法的时候,如果后面有逻辑需要移除这些方法,在起始附加的时候,就要用委托变量去装载这些方法。
在使用event事件的时候,它给我的一个非常深的印象就是层层调用或引用。本来从A点可以直线的方式奔到B点,但是有了事件,可以从A点奔到C点,C点奔到D点,再从D点奔到B点,转了一大圈,最后费了大把气力,终于引用到了需要被调用的方法。而传到该方法的参数,在中途已经被折腾过N遍,该方法可以直接获取这些参数的值。
事件是个好东西,它可以将外部自定义的方法引入到其他已经被封装好的方法中,而这些被封装好的方法可以不用去管你外部自定义方法的实现过程,它也没精力去管。
public void Show(string param) {
OnDoEvent(param);
}
//调用事件
protected virtual void OnDoEvent(string param) {
if(DoEvent != null) {
DoEvent(param);
}
}
//---------------------------------
//用自定义方法 附加
p.DoEvent += Print;
p.Show("parameter");
读书笔记 C#事件event浅析(一)的更多相关文章
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- 读书笔记(05) - 事件 - JavaScript高级程序设计
HTML依托于JavaScript来实现用户与WEB网页之间的动态交互,接收用户操作并做出相应的反馈,而事件在此间则充当桥梁的重要角色. 日常开发中,经常会为某个元素绑定一个事件,编写相应的业务逻辑, ...
- [Clr via C#读书笔记]Cp11事件
Cp11事件 类型之所以提供事件通知功能,是因为类型维护了一个已登记方法的列表,事件发生后,类型将通知列表登记的所有方法: 事件模型建立在委托的基础上.委托是调用回调方法的一种类型安全的方式. 设计事 ...
- 读书笔记 C# 接口之浅析
一.接口可以包含 属性.方法.事件和索引器: 二.接口不能被实例化: 三.一个类可以继承多个接口: 四.接口不能包含方法的实现: 五.继承接口的类必须实现接口中所有成员: 六.显式实现接口的成员,不能 ...
- (读书笔记)函数参数浅析-JavaScript高级程序设计(第3版)
ECMAScript函数不介意传递的参数个数,因为在其内部是用一个数组进行表示的.在函数体内可以通过arguments对象来访问这个参数数组,就像我们正常访问数组一样处理. arguments对象只是 ...
- 读书笔记(一)—— 浅析浏览器渲染过程和html中的文件加载
在构建页面时,我们会在html中载入一个或多个css和js文件.或许大家都已经习惯了"最佳实践"中,css文件应该放在<head>标签中引入,而js文件则是放在< ...
- 《C#图解教程》读书笔记之五:委托和事件
本篇已收录至<C#图解教程>读书笔记目录贴,点击访问该目录可获取更多内容. 一.委托初窥:一个拥有方法的对象 (1)本质:持有一个或多个方法的对象:委托和典型的对象不同,执行委托实际上是执 ...
- 《Android开发艺术探索》读书笔记 (3) 第3章 View的事件体系
本节和<Android群英传>中的第五章Scroll分析有关系,建议先阅读该章的总结 第3章 View的事件体系 3.1 View基本知识 (1)view的层次结构:ViewGroup也是 ...
- 《C#从现象到本质》读书笔记(六)第8章委托和事件
<C#从现象到本质>读书笔记(六)第二部分 C#特性 第8章委托和事件 从这一部分开始,知识点就相对少了,重要的是代码练习.奈何太高深的代码平常不怎么用,这些特性也不是经常写代码的. 委托 ...
随机推荐
- 终于把joomla 的 protostar 模版的菜单,从垂直改到水平了
protostar-applying-menu-class-suffixes-horizontal-vs-vertical-menus.html joomla 3.7.5 附带的这个template ...
- LeetCode--441--排列硬币
问题描述: 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围 ...
- linux进程管理之优先级
进程优先级 nice ==================================================================================== Linu ...
- Confluence 6 教程:空间高手
这个教程将会带你如何在 Confluence 中创建和自定义空间,同时也包括如何删除空间,如果需要的话.通过这个教程,你将成为使用空间的高手. 你需要具有创建空间(Create space)和创建个人 ...
- px em rem 区别
PX:PX实际上就是像素,用PX设置字体大小时,比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,如果改变了浏览器的缩放,这时会使用我们的Web页面布局被打破.这样 ...
- 4.1.4 Nim
Problem description: 有n堆石子,每堆各有ai颗石子.A和B轮流从非空的石子堆中取走至少一颗石子.A先取,取光所有石子的一方获胜.当双方都采用最佳策略时,谁会获胜? 1<=n ...
- 『TensorFlow』第七弹_保存&载入会话_霸王回马
首更: 由于TensorFlow的奇怪形式,所以载入保存的是sess,把会话中当前激活的变量保存下来,所以必须保证(其他网络也要求这个)保存网络和载入网络的结构一致,且变量名称必须一致,这是caffe ...
- Highcharts 配置选项详细说明
Highcharts 配置选项详细说明 Highcharts 提供大量的配置选项参数,您可以轻松定制符合用户要求的图表,本章节为大家详细介绍Highcharts 配置选项使用说明: 参数配置(属性+事 ...
- Highcharts 环境配置
Highcharts 环境配置 本章节我们将为大家介绍如何在网页中使用 Highcharts. Highcharts 依赖于 jQuery,所以在加载 Highcharts 前必须先加载 jQuery ...
- zzw原创_oracle回收站相关操作知识
1.查询回收站状态语句 select * from user_recyclebin order by droptime desc 2.还原回收站 FLASHBACK TABLE << ...