C#事件的学习体会

事件的实现是通过委托机制完成的,每个事件维护一个自己的委托列表,保存所有注册到这个事件的控件委托。

单个事件类型

事件类型定义了一个委托原型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表,是链表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值