事件处理实际上是一种具有特殊签名的delegate, 像这个样子:public delegate void EventHandler(object sender, EventArgs e);
 
类型定义事件成员,就可以通知其他对象发生了特定的事情。如果定义一个事件成员,意味着类型要提供一下能力:
#1,方法可登记也可注销它对该事件的关注
#2,该事件发生时,登记了的方法会收到通知。
 
类型之所以能够提供事件通知功能,是因为类型维护了一个已经登记方法的列表。事件发生后,类型将通知列表中所有已登记的方法。
CLR事件模型建立在委托的基础上。委托是调用(invoke)回调方法的一种类型安全的方式。对象凭借回调方法接收他们订阅的通知。
 
---------
invoke和call
在英语的语境中,invoke和call的区别在于,在执行一个所有信息都已知的方法时,用call比较恰当。这些信息包括要引用的类型、方法的签名以及方法名。
但是,在需要先“唤出”某个东西来帮你调用一个信息不明的方法时,用invoke就比较恰当。
 
---------
 
 
这个OnBoiled方法的问题在于,线程可能发现Boiled不为null, 然后,就在调用之前,另一个线程从委托链中移除一个委托,使Boiled变成了null,还会抛出一个NullReferenceException异常。为了修正这个竞态问题,可以像下面这样写OnBoiled方法
 
 
 
 

CLR via C#深解笔记五 - 事件的更多相关文章

  1. CLR via C#深解笔记七 - 自动内存管理(垃圾回收)

    每个应用程序都要使用这样或者那样的资源,比如文件.内存缓冲区.屏幕空间.网络连接.数据库资源等.事实上,在面向对象的环境中,每个类型都代表可供程序使用的一种资源. 要使用这些资源,必须为代表资源的类型 ...

  2. CLR via C#深解笔记四 - 方法、参数、属性

    实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, ...

  3. CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段

    编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1 ...

  4. CLR via C#深解笔记六 - 泛型

    面向对象编程一个好处就是“代码重用”,极大提高了开发效率.如是,可以派生出一个类,让它继承基类的所有能力,派生类只需要重写虚方法,或添加一些新的方法,就可以定制派生类的行为,使之满足开发人员的需求. ...

  5. CLR via C#深解笔记二 - 类型设计

    类型基础 所有类型都从System.Object派生   CLR要求所有对象都用new 操作符来创建. Employee e = new Employee("Constructor Para ...

  6. CLR via C#深解笔记一 - CLR & C# 基础概念

    写在前言   .Net Framework并不是Win 32 API 和COM上的一个抽象层.   某种程度上,它是自己的操作系统,有自己的内存管理器,自己的安全系统,自己的文件加载器,自己的错误处理 ...

  7. JavaScript事件详解-jQuery的事件实现(三)

    正文 本文所涉及到的jQuery版本是3.1.1,可以在压缩包中找到event模块.该篇算是阅读笔记,jQuery代码太长.... Dean Edward的addEvent.js 相对于zepto的e ...

  8. Android笔记:触摸事件的分析与总结----TouchEvent处理机制

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320   ...

  9. javascript - 工作笔记 (事件四)

    在javascript - 工作笔记 (事件绑定二)篇中,我将事件的方法做了简单的包装,  JavaScript Code  12345   yx.bind(item, "click&quo ...

随机推荐

  1. 自定义Windows性能监视器

    Windows 性能监视器是一个很好用的自带监视工具,对于一些基本简单的监视需求可以轻松满足.本文主要总结了一下如何将自己应用中的一些性能数据暴露到性能监视器上方便管理. 什么?不知道什么是Windo ...

  2. [ACM_水题] UVA 11729 Commando War [不可同时交代任务 可同时执行 最短完成全部时间 贪心]

    There is a war and it doesn't look very promising for your country. Now it's time to act. You have a ...

  3. Backbone Model——数据模型

    Model是Backbone中所有数据模型的基类,用于封装原始数据,并提供对数据进行操作的方法,我们一般通过继承的方式来扩展和使用它. 如果你做过数据库开发,可能对ORM(对象关系映射)不会陌生,而B ...

  4. paip.哈米架构CAO.txt

    paip.哈米架构CAO.txt 智能语义搜索方法,建立了学习机,通过对用户点击情况的处理,对知识库进行及时更新,并将搜索结果根据关联度进行排序及重新排序,使用户能快速查询信息,从而能不断适应用户使用 ...

  5. paip.最省内存的浏览器评测 cah

    paip.最省内存的浏览器评测 cah 作者Attilax  艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/at ...

  6. SpringIOC&AOP

    Spring是为简化企业级系统开发而诞生的,Spring框架为J2EE应用常见的问题提供了简单.有效的解决方案,使用Spring,你可以用简单的POJO(Plain Old Java Object)来 ...

  7. C++11中async中future用法(一)

    async意味着异步执行代码,看如下示例: #include <future> #include <thread> #include <chrono> #inclu ...

  8. Android 开发:view的几种布局方式及实践

    View的几种布局显示方法,以后就不会在针对布局方面做过多的介绍.View的布局显示方式有下面几种:线性布局(Linear Layout).相对布局(Relative Layout).表格布局(Tab ...

  9. Android onTouch事件传递机制

    Android onTouch事件介绍: Android的触摸事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION ...

  10. SQL Server 内存中OLTP内部机制概述(四)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<SQL Server In-Memory ...