5.14.2 事件的声明及使用
要在程序中使用事件,就必须先声明事件。下面来声明一个事件,代码如下:
public delegate void MrEventDelegate(object sender, System.EventArgs e); |
.NET Framework 中事件的签名中,通常第一个参数为引用事件源的对象,第二个参数为一个传送与事件相关的数据的类,但是, C#语言中并不强制使用这种形式,只要事件签名返回void,其他方面可以与任何有效的委托签名一样。
向类中添加事件需要使用event关键字,并提供委托类型和事件名称。例如:
public class EventSend |
事件可标记为public、private、protected、internal或protectedinternal,这些访问修饰符定义用户访问事件的权限。
若要引发事件,类可以调用委托,并传递所有与事件有关的参数,然后,委托调用已添加到该事件的所有处理程序(如果该事件没有任何处理程序,则该事件为空),因此在引发事件之前,事件源应确保该事件不为空,以避免发生NullReferenceException异常。若要避免争用条件(最后一个处理程序会在空检查和事件调用之前被移除),在执行空检查和引发事件之前,事件源还应创建事件的一个副本。下面的代码实现了触发MrEventDelegate事件:
private void RaiseTestEvent() |
每个事件都可以分配多个处理程序来接收该事件,这种情况下,事件自动调用每个接收器,无论接收器有多少,引发事件只需调用一次该事件。
要接收某个事件的类,可以首先创建一个方法,然后向类事件自身添加该方法的一个委托,该过程称为“订阅事件”。
若要订阅事件,接收器必须创建一个与事件具有相同类型的委托,并使用事件处理程序作为委托目标;然后,接收器必须使用加法赋值运算符(+=)将该委托添加到源对象的事件中。例如:
public void Subscribe(EventSend send) |
若要取消订阅事件,接收器可以使用减法赋值运算符(-=)从源对象的事件中移除事件处理程序的委托。例如:
public void UnSubscribe(EventSource send) |
【责任编辑:阚书 TEL:(010)68476606】
| 回书目 上一节 下一节 |
|
· 系统分析师自测获奖名.. · Linux结课考试自测获奖.. · 上周Linux系统命令的使.. · 上周真题冲刺测试获奖.. · 全国计算机等考四级模.. · 08年3月各大网上书店及.. |
· 网络工程师模拟测试获.. · 全国计算机软考考试指.. · 3月24日WCF聊天活动 积.. · 全国计算机等级考试四.. · 软件项目估计:第2版 · 系统分析师基础知识自.. |
|
||||
| · 2008年上半年全国软考.. · 微软出价446亿美元收购.. · 华为员工自杀频频拷问.. · 三层交换技术专题 · ARP攻击防范与解决方案 · 隐私保护技术探讨 · 反垃圾邮件技术应用 · 龙芯要做中国的“奔腾” |
· Windows Server 2008专.. · AMD Phenom三核处理器.. · 路由器设置与口令恢复 · 微软Forefront企业安全.. · LAMP技术精解 · 企业数据恢复指南 · 技术人求职简历完备手册 · Apache技术专题 |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · Apache技术专题 · 中间件应用技术专题 · 三层交换技术专题 |
· SQL Server入门到精通 · Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · SOA 面向服务架构 · PHP开发应用手册 · 企业数据恢复指南 |
|||
|
||||
| · iSCSI应用与发展 · 中间件应用技术专题 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 |
· Apache技术专题 · RAID——磁盘阵列基础 · 企业数据恢复指南 · 路由器设置与口令恢复 · SOA 面向服务架构 · ADSL应用面面俱到 · ADSL应用面面俱到 · 反垃圾邮件技术应用 |
|||