天津网站建设制作方案甘肃网站建设哪家好
天津网站建设制作方案,甘肃网站建设哪家好,廖珍琴建盏简介,网站设计公司 推荐第十一章 事件 事件是在类中定义的一种成员#xff0c;定义了事件成员的类型可以#xff1a; 方法能登记对事件的关注方法能注销对事件的关注事件发生时#xff0c;登记了的方法会收到通知 设计要公开事件的类型 定义类型#xff08;容纳要发给事件接收者的附加信息#…第十一章 事件 事件是在类中定义的一种成员定义了事件成员的类型可以 方法能登记对事件的关注方法能注销对事件的关注事件发生时登记了的方法会收到通知 设计要公开事件的类型 定义类型容纳要发给事件接收者的附加信息 该类型应该从System.EventArgs派生而且类名以EventArgs结尾 定义不要附加数据的事件时可直接使用EventArgs.Empty 定义事件成员 以event关键字定义需要指定访问性一般一定是public委托类型和名称 例public event EventHandlerXXXEventArgs eventName 对应方法原型必须为 void MethodName(Object sender, XXXEventArgs e); (事件模式要求sender为Object类型,参数名为e返回类型为void) 定义引发事件的方法 定义一个受保护的虚方法参数为XXXEventArgs 要引发事件时类及派生类的代码调用该方法如果有对象登记了对事件的关注那么通知那些对象 为了线程安全一般先将委托字段复制到临时变量中用临时变量引用赋值发生时的委托链 例var temp Volatile.Read(ref eventName) 定义方法将输入转化为事件 即在合适时机调用虚方法通知关注了事件的对象 编译器如何实现事件 在定义了事件成员后C#编译器将会构造 一个被初始化为null的委托字段始终是private即使事件被定义为public一个add_XXX方法和事件的访问性一致调用System.Delegate.Combine方法一个remove_XXX方法和事件的访问性一致调用System.Delegate.Remove方法 设计侦听事件的类型 使用操作符登记对象对事件的关注内部被翻译成add_XXX方法 使用-操作符注销对象对事件的关注内部被翻译成remove_XXX方法 显式实现事件 问题如果一个类提供大量事件那么这个类的每个对象都要准备大量字段编译器为事件成员构造私有的委托字段由于有些事件不常用造成内存浪费解决显式实现事件而不是让编译器自己完成构造步骤 额外定义一个类用于储存事件类中包含一个集合通常使用字典key是事件类型value是委托列表在该类中实现Add(key, value)Remove(key,value)Raise(key,sender,e)方法在类的本体中定义 刚才额外定义的集合类字段用于储存事件为每种事件定义 一个静态只读对象拥有独立的哈希码作为key事件访问器方法显式实现add和remove调用集合类的AddRemove方法)定义引发事件的受保护的虚方法调用集合类的Raise方法定义将输入转化为事件的方法调用引发事件的方法
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87475.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!