EventHandlerList 学习

 EventCollection

如果在单个控件中有多个事件,那么使用System.ComponentModel.EventHandlerList对事件进行保存将会在内存占用上有不错的提高。EventHandlerList对一个类内发布多个事件提供了一个列表容器。下面是多个事件和使用EventHandlerList的对比示意:

 (汗这图看不懂什么意思)

第一步是实例化一个EventHandlerList的实例: 

第二步是声明一个容器用于保存事件的key : private static readonly object ClickEvent = new object();

最后一步是像往常一样声明一个事件,但有所不同的是就像属性的get和set程序块一样,对于事件C#提供了add和remove关键字:


public event EventHandler Click


{
add{

Events.AddHandler(ClickEvent, value);



}



remove



{



Events.RemoveHandler(ClickEvent, value);



}


}


而在这时的事件调用方法就会像下面代码:


protected virtual void OnClick(EventArgs e)


{



EventHandler clickEventDelegate = (EventHandler)Events[ClickEvent];



if (clickEventDelegate != null)



{



clickEventDelegate(this, e);



}


}


上面代码首先从事件列表中通过索引器以第一步中保存事件的key为参数提取出事件并检查客户端是否注册到此事件,如果是,则激发事件。引用自:http://blog.sina.com.cn/s/blog_60664d670100hkku.html

posted @ 2011-04-08 07:08  张土土  阅读(1165)  评论(0编辑  收藏  举报