第十一章(CLR 事件)
2015-11-25 15:24
288 查看
1.设计事件要公开事件类型:
第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息
第二步:定义事件成员
事件成员使用C#关键字event来定义。每个事件成员都要指定以下内容:
一个可访问性标识符(几乎肯定是Public,这样其他代码才能访问该事件成员);
另一个委托类型,它指出要调用的方法的原型,以及一个名称(可以是任意有效的标识符)。
注意:事件模式要求所有事件处理程序(方法)的返回类型都是void;
第三步:定义负责引发事件的方法来通知事件的登记对象。
第四步:定义方法将输入转化为期望事件
第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息
public class NewMaillEventArgs:EventArgs { private readonly string _m_from; private readonly string _m_to; private readonly string _m_subject; public NewMaillEventArgs(string from,string to,string subject) { _m_from = from; _m_to = to; _m_subject = subject; } public string From { get { return _m_from; } } public string To { get { return _m_to; } } public string Subject { get { return _m_subject; } } }
第二步:定义事件成员
事件成员使用C#关键字event来定义。每个事件成员都要指定以下内容:
一个可访问性标识符(几乎肯定是Public,这样其他代码才能访问该事件成员);
另一个委托类型,它指出要调用的方法的原型,以及一个名称(可以是任意有效的标识符)。
//定义成员变量 public event EventHandler<NewMaillEventArgs> NewMaill;
注意:事件模式要求所有事件处理程序(方法)的返回类型都是void;
第三步:定义负责引发事件的方法来通知事件的登记对象。
//如果类是密封的,该方法要声明为私有和非虚 protected virtual void OnNewMaill(NewMaillEventArgs e) { //出于线程安全的考虑,现在将对委托字段的引用复制到一个临时变量时 EventHandler<NewMaillEventArgs> temp = Volatile.Read(ref NewMaill); //任何方法登记了事件的关注,就通知它们 if (temp!=null) { temp(this, e); } }
第四步:定义方法将输入转化为期望事件
public void SimulateNewMaill(String from, String to, String subject) { NewMaillEventArgs e=new NewMaillEventArgs(from,to,subject); OnNewMaill(e); }
相关文章推荐
- MVC框架是什么
- ichartjs
- Apache Spark学习:利用Eclipse构建Spark集成开发环境
- MySQL的权限
- 空间数据库备份与迁移机制
- android 5.1预置apk
- 速来膜拜!20位活跃在Github上的国内技术大牛
- Apache的站点快速切换工具a2dissite和a2dissite
- Universal-Image-Loader完全解析(三)---源代码解读
- html5开发之viewport使用
- 告马云书 -- 谈阿里云OS 删除用户应用事件
- jquery ajax 同步查询
- C#指定日期为一年中的第几周
- jQuery Ajax 实例 全解析
- common.js js中常用方法
- 一款比较好用的JS时间控件-laydate
- ZOJ 1084
- 【Unity】Unity5版本的AssetBundle打包方案之打包Scene场景
- memcached的常用命令
- c++实现读取配置文件