委托与事件的关系

说道"委托"这个词我们肯定都不会陌生吧,生活中"委托"就是请别人帮我们做事。

程序中也是如此,委托机制是.Net中特有的,我们可以将方法作为参数传给委托,让委托帮我调用执行方法。

先来看看委托是如何定义的:

[访问修饰符] delegate 返回值 委托名([参数]);

委托类似于C/C++中的函数指针,但是它们又有一些区别,并不是完全等价的。

说到指针,很多人肯定又晕,指针其实就是地址,而函数指针就是函数的地址或者说函数的入口,这样说相信我们会好理解一点。

委托是一种类型,可以存储多个方法的列表,而函数指针只能存储一个函数的指针,除非使用指针数组才可以存储多个函数的指针。

好了,言归正传。下面我们来看看事件是什么玩意?

我们定义一个事件是使用event关键字,其实事件就是委托类型变量,这是不是出乎很多人的意料?

event关键字主要是为了限制我们在外部调用委托,只允许在类内部调用委托,并且只能通过+=和-=来追加移除方法。

下面我们定义一个事件:

public event void MyDelegate dele;

然后我们通过Reflecator反编译可以看到:

事件的本质其实就是一个私有委托和两个方法(add和remove方法)

有点类似字段和属性,事件就是在类内部对委托进行了封装。

所以说事件其实一个阉割后的委托。

原文地址:https://www.cnblogs.com/rampb/p/3547362.html