C#事件的学习体会
2008-07-14 15:31
302 查看
事件的实现是通过委托机制完成的,每个事件维护一个自己的委托列表,保存所有注册到这个事件的控件委托。
单个事件类型
事件类型定义了一个委托原型public delegate void XXXEventHandler(object sender, XXXEventArgs);
并且维护一个委托列表public event XXXEventHandler YYY;
还定义一个受保护虚方法负责通知事件的登记对象protected virtual void OnXXX(XXXEventArgs e){...}
控件的定义,首先把自己注册到事件的委托列表中,然后按照委托原型定义自己的委托方法。当事件发生时,OnXXX会通知所有注册到事件XXXEventArgs 的委托列表里面的控件,XXXEvent 事件通过委托机制,使控件会调用自己的委托方法来响应事件。
控件通过维护一个的事件/委托的集合来处理自己的多个事件,例如button可以有click事件/click委托,focus事件/focus委托,实际是一个事件/委托列表,比如click事件/button1click委托,button2click委托,button3click委托
集合EventHandlerSet用来保存控件的事件/委托对,通过Hashtable来实现,每个事件都有一个散列键,EventHandlerSet通过实现一个索引器来get/set事件的委托。
实际FCL中是通过System.ComponentModel.EventHandlerList来实现EventHandlerSet的功能,而且使用的不是Hash表,是链表。
单个事件类型
事件类型定义了一个委托原型public delegate void XXXEventHandler(object sender, XXXEventArgs);
并且维护一个委托列表public event XXXEventHandler YYY;
还定义一个受保护虚方法负责通知事件的登记对象protected virtual void OnXXX(XXXEventArgs e){...}
控件的定义,首先把自己注册到事件的委托列表中,然后按照委托原型定义自己的委托方法。当事件发生时,OnXXX会通知所有注册到事件XXXEventArgs 的委托列表里面的控件,XXXEvent 事件通过委托机制,使控件会调用自己的委托方法来响应事件。
控件通过维护一个的事件/委托的集合来处理自己的多个事件,例如button可以有click事件/click委托,focus事件/focus委托,实际是一个事件/委托列表,比如click事件/button1click委托,button2click委托,button3click委托
集合EventHandlerSet用来保存控件的事件/委托对,通过Hashtable来实现,每个事件都有一个散列键,EventHandlerSet通过实现一个索引器来get/set事件的委托。
实际FCL中是通过System.ComponentModel.EventHandlerList来实现EventHandlerSet的功能,而且使用的不是Hash表,是链表。
相关文章推荐
- C#学习之静态成员和非静态成员,构造函数,方法,方法参数,操作符重载,事件
- C#学习笔记 事件
- C#学习笔记(事件)
- 精通C#学习笔记之事件(一)使用委托的弊端
- C#学习——事件和索引指示器
- C#事件机制学习
- C#与.NET4 高级程序设计-----委托、事件 学习笔记
- C#事件学习
- C#事件的知识,转载学习
- C#学习笔记19-委托和事件
- C#学习笔记之二:事件
- C#学习之按钮点击事件
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- 002--从C#到Python —— 谈谈我学习Python一周来的体会
- 我是如何学习设计模式的一:.NET C# 委托定天下,学好委托事件,设计模式精髓可以理解三分之一,怎么说也是三分天下之势了
- C#学习笔记 委托和事件
- [学习笔记]c#中的委托、事件、Func、Predicate、Observer设计模式以及其他
- [Unity&C#&事件委托]对委托事件的学习与实践
- C# 2.0学习之--事件2
- 学习:C# 中的委托和事件(转)