马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

告诉你委托跟事件的关系

[复制链接]
查看3412 | 回复0 | 2015-1-7 09:43:05 | 显示全部楼层 |阅读模式
说道"委托"这个词我们肯定都不会陌生吧,生活中"委托"就是请别人帮我们做事。

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

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

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

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

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

说说什么是事件

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

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

下面我们定义一个事件:

public event void MyDelegate dele;

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

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

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

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

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则