告诉你委托跟事件的关系
说道"委托"这个词我们肯定都不会陌生吧,生活中"委托"就是请别人帮我们做事。程序中也是如此,委托机制是.Net中特有的,我们可以将方法作为参数传给委托,让委托帮我调用执行方法。
先来看看委托是如何定义的:
[访问修饰符] delegate 返回值 委托名([参数]);
委托类似于C/C++中的函数指针,但是它们又有一些区别,并不是完全等价的。
说到指针,很多人肯定又晕,指针其实就是地址,而函数指针就是函数的地址或者说函数的入口,这样说相信我们会好理解一点。
委托是一种类型,可以存储多个方法的列表,而函数指针只能存储一个函数的指针,除非使用指针数组才可以存储多个函数的指针。
说说什么是事件
我们定义一个事件是使用event关键字,其实事件就是委托类型变量,这是不是出乎很多人的意料?
event关键字主要是为了限制我们在外部调用委托,只允许在类内部调用委托,并且只能通过+=和-=来追加移除方法。
下面我们定义一个事件:
public event void MyDelegate dele;
然后我们通过Reflecator反编译可以看到:
事件的本质其实就是一个私有委托和两个方法(add和remove方法)
有点类似字段和属性,事件就是在类内部对委托进行了封装。
所以说事件其实一个阉割后的委托。
页:
[1]