事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象称为事件发送方。捕获事件并对其作出响应的对象叫做事件接收方。
在事件通信中,事件发送方类不知道哪个对象或方法将接收到(处理)它引发的事件。所需要的是在源和接收方之间存在一个媒介(或类似指针的机制)。.NET Framework 定义了一个特殊的类型(Delegate),该类型提供函数指针的功能。
委托是可保存对方法的引用的类。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。这样,委托就等效于一个类型安全函数指针或一个回调。虽然委托具有许多其他的用途,但这里只讨论委托的事件处理功能。一个委托声明足以定义一个委托类。声明提供委托的签名,公共语言运行库提供实现。下面的示例显示了事件委托声明。
c# 代码
- public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
该语法与方法声明的语法相似,但是 delegate 关键字通知编译器 AlarmEventHandler 是一个委托类型。按照约定,.NET Framework 中的事件委托有两个参数:引发事件的源和该事件的数据。
AlarmEventHandler 委托的实例可以绑定到任何一个与其签名匹配的方法上,例如下面的示例中显示的 WakeMeUp 类的 AlarmRang 方法。
public class WakeMeUp
{
// AlarmRang has the same signature as AlarmEventHandler.
public void AlarmRang(object sender, AlarmEventArgs e)
{...};
...
}
只有当事件生成事件数据时才需要自定义事件委托。许多事件,包括一些用户界面事件(例如鼠标单击)在内,都不生成事件数据。在这种情况下,类库中为无数据事件提供的事件委托 System.EventHandler 便足够了。其声明如下。
delegate void EventHandler(object sender, EventArgs e);
Public Delegate Sub EventHandler(sender As Object, e As EventArgs)
事件委托是多路广播的,这意味着它们可以对多个事件处理方法进行引用。有关详细信息,请参见 Delegate。委托考虑了事件处理中的灵活性和精确控制。通过维护事件的已注册事件处理程序列表,委托为引发事件的类担当事件发送器的角色。
有关使用委托在您的组件或控件中提供事件功能的详细信息,请参见引发事件。
有关在您的应用程序中使用事件的概述,请参见使用事件。
分享到:
相关推荐
委托、事件和异常处理是C#中实现封装、事件驱动编程和错误管理的高级特性。委托是C#中的一种类型,它可以引用具有特定参数列表和返回类型的方法。MSDN C# 经典英文原版会指导如何使用委托,包括如何合并委托以实现多...
C#还支持事件和委托,这是Windows Forms和WPF等GUI编程的关键。书中这部分会解释如何利用事件驱动编程模型,以及如何使用委托来实现回调函数,这在创建用户界面和响应用户操作时十分实用。 此外,《MSDN C#入门经典...
总之,【C#MSDN Sample】的匿名委托示例项目旨在帮助开发者理解和掌握C#中的匿名委托及其在实际开发中的应用,包括事件处理、简化回调函数和提高代码的可读性。通过学习和实践这个示例,开发者可以更好地利用C#的这...
2. **面向对象编程**:详细介绍了类、对象、构造函数、析构函数、属性、索引器、方法、事件、委托、接口、抽象类和密封类等概念。 3. **泛型**:泛型允许创建可重用的代码,用于处理多种数据类型,提高代码的灵活性...
- **区别委托和事件**:对比委托和事件的不同之处及其适用场景。 #### 九、语言集成查询(LINQ) - **LINQ概述**:提供了一个关于LINQ的全面介绍。 - **查询表达式基础**:讲解查询表达式的语法和结构。 - **C#中...
第二本书可能深入讲解C#编程语言,涵盖其基本语法、面向对象特性,如类、接口、继承、多态,以及更高级的概念,如泛型、委托、事件、LINQ(Language Integrated Query)等。 第三本书可能聚焦于ASP.NET,这是.NET ...
【标题】MSDN上的C#.NET教程(part11)涵盖了C#编程语言和.NET框架的高级主题,特别是关于委托的设计和应用。这部分教程是MSDN系列课程的一部分,旨在帮助开发者深入理解C#.NET的核心概念和技术。 【描述】《现代软件...
10. **高级特性**:探索VB的高级特性,如多线程、反射、委托、接口和泛型,这些将帮助你编写更复杂、高效的程序。 11. **Web服务和网络编程**:了解如何在VB中使用XMLHttpRequest对象进行HTTP请求,以及调用Web服务...
编程指南则关注C#的高级特性,如泛型、委托、事件、接口、匿名方法、LINQ等,这些特性让C#具备了强大的灵活性和可扩展性。通过学习这部分,读者可以提升代码质量和效率,更好地利用C#的现代编程范式。 最后的语言...
Modern C#(11):深入“委托和事件” (Level 300) 讲 师:俞晖 MSDN 特邀讲师 课程简介:本次课程是系列课程《现代软件开发——使用.NET与C#》的第十一讲(即重开第一讲), 这次系列讲座的目的是为希望从...
6. **委托与事件**:委托是C#中的一种类型,可以引用方法,常用于事件处理;事件则是对象间通信的一种方式。 7. **泛型**:泛型允许在不指定具体类型的情况下编写代码,提高了代码的复用性和安全性。 8. **LINQ**...
MSDN 中的图形元素和文档约定:类、接口、结构、委托、枚举等。 只是一张图片。表示类等在msdn中的表示。
委托(C# 编程指南) 事件(C# 编程指南) 泛型(C# 编程指南) LINQ 查询表达式(C# 编程指南) Lambda 表达式(C# 编程指南) 迭代器(C# 编程指南) 命名空间(C# 编程指南) 可空类型(C# 编程指南) 不安全代码...
- 如何设计和实现这些层之间的接口和通信协议,如使用接口、委托或事件。 - 如何使用依赖注入(Dependency Injection, DI)和控制反转(Inversion of Control, IoC)容器来管理对象间的依赖关系。 - 业务逻辑层如何...
在示例中,你可以看到如何使用lambda表达式来创建和使用匿名委托,例如: ```csharp Action<string> printMessage = message => Console.WriteLine(message); printMessage("Hello, World!"); ``` ### **2. 数组**...
总的来说,《MSDN C# 4.0编程指南》不仅涵盖了语言基础,如类、对象、继承、接口、委托、事件等,还包括高级特性和实践,如反射、属性、异常处理、线程同步、内存管理等。通过深入学习这份指南,开发者可以全面掌握...
以上是对MSDN类库开发人员设计指南的综合概述,旨在为.NET Framework类库开发者提供实用的设计指南和最佳实践。通过遵循这些指南,开发者可以创建出高质量、易于维护且具有良好性能表现的类库。