码迷,mamicode.com
首页 > 其他好文 > 详细

第14章 事件

时间:2016-09-09 23:49:32      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

  • 事件基于委托,为委托提供了一种发布机制, 事件是成员,是对象,而不是类型.

    So: 必须声明在类或者结构中; 被隐式初始化为null.

  • 几个概念:

    发布者( publisher )

    订阅者( subscriber )

    事件处理程序( event handler )

    触发(raise ) 事件调用( invoke ) 或触发( fire )

  • 事件封装了一个私有的委托

    技术分享

  • 使用事件的5个源代码组件

    技术分享

  • 具体如图
  • 技术分享

    ? ?

  • 声明事件:
    • 技术分享
    • 技术分享
    • 技术分享
  • 事件声明需要委托类型的名字,必须指定事件保存的方法的签名和返回值类型.更好的方案是EventHandler委托

    ? ?

  • 技术分享
  • 使用自定义委托:
    • 使用非泛型委托:

      public delegate void MyEventHandler (object sender, MyEventArgs e)

      ? ?

    • 使用泛型委托:

      //public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); //EventHandler的原型

      public delegate void EventHandler<MyEventArgs> EventX; //声明事件

  • 订阅事件 +=

    事件处理程序可以是以下任意一种:

    • 实例方法的名称;
    • 静态方法的名称;
    • 匿名方法;
    • Lambda表达式
  • 触发事件,使用方法同调用函数类似:
    • 使用事件名称,后面跟的参数列表包含在圆括号中;
    • 参数列表必须与事件的委托类型相匹配。

    技术分享

  • 移除事件处理方法:

    如果一个处理程序向事件注册了多次,那么当执行命令移除处理程序时,将只移除列表中该

    处理程序的最后一个实例。

  • 定义事件访问器 (事件访问器表现为Void 方法,不能使用return语句)

    技术分享

  • 注意: 声明了事件访问器之后,事件不再包含任何内嵌的委托对象; 必须手动实现存储和移除事件的方法.

    ? ?

    ? ?

    ? ?

    ? ?

    ? ?

第14章 事件

标签:

原文地址:http://www.cnblogs.com/InspiringMind/p/5858250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!