事件(event)和委托(delegate)的综合运用实例(WinForm控件事件执行流程和原理),和EventHandler委托

前言

关于委托前面已经写了:

C#中委托(delegate)和多播委托的理解
Action和Func泛型委托,委托,泛型,匿名函数,Lambda表达式的综合使用

其实初衷是为了解WinFrom中的控件或者COM组件中的各种事件运行的机制,里面涉及的知识整理起来还是比较多的,各种类型的委托,事件,和泛型等。

这里先整理事件(event),然后通过几个实例了解架构中的事件从激活到调用回调函数的具体过程。

事件(event)

事件的官方文档
事件基于委托,为委托提供了一种发布/订阅机制,

  1. 可将事件理解为一种特殊用途的委托,或者说是受限制的委托,是委托一种特殊应用;
  2. 事件里面其实就两个方法(即add_event()remove_event())和一个私有的委托变量,这两个方法里面分别是对这个私有的委托变量进行的合并和移除,当调用事件的 += 时其实是调用的事件里面的add_event()方法,同样 -= 调用的是remove_event()方法;
  3. 事件只能够从对象外部增加新的响应方法和删除已知的响应方法,而不能主动去触发事件和获取其他注册的响应方法等信息。如果使用公有的delegate则不能做这些限制,也就是说事件对委托做了限制,使委托使用起来更加方便。

可以以下面这个图来理解:
事件的发布/订阅机制

从图中我们可以理解什么是发布者和订阅者,

且为什么说事件是特殊用途的委托,是受限制的委托?
限制一:不同于委托和类同级(可以在类的外边或者里边声明),事件只能在类中声明;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值