最近园子里发表了一些讨论“事件(Event)”的文章,我也来凑个热闹,谈谈我对事件的一些粗浅的认识。本文不谈设计模式(观察者模式),只从运行时的角度来分析事件这个对象到底是个什么东西,它有那么神秘吗?为了更好的分析事件,本文将会编写一些例子来模拟事件的订阅机制。本文对事件的分析可以概括为下面三句话:
- 事件本质上是一个MulticastDelegate对象;
- MulticastDelegate对象是多个Delegate对象的链表;
- Delegate = Object + MethodInfo,委托的执行最终通过反射来完成
其实你完全可以通过Reflector这样的工具来看Delegate类型是如何定义的。在这里,我们只关注Delegate本质的东西,即Delegate最终是如果执行的。为此,我创建了下面一个简单的MyDelegate类型来模拟Delegate。
class MyDelegate
2: {
3:
private set; }
private set; }
6:
object target, MethodInfo method)
8: {
this.Target = target;
this.Method = method;
11: }
12:
object[] args)
14: {
this.Target, args);
16: }
17: }