zoukankan      html  css  js  c++  java
  • CLR via C#深解笔记五

    事件处理实际上是一种具有特殊签名的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方法
     
     
     
     
  • 相关阅读:
    LAMP动态网站安装脚本
    图片上传
    如何用qq代理发送邮件
    初识c#
    Eclipse使用技巧
    maven中 install的install:install的区别
    Git的各种状态
    phpStorm中Structure窗口中的符号代表的意思
    Apache+PHP+MySQL+phpMyAdmin+WordPress搭建
    Session重点整理
  • 原文地址:https://www.cnblogs.com/Dlonghow/p/5126132.html
Copyright © 2011-2022 走看看