1 / 32

第4章 委托和事件

第4章 委托和事件. .NET Framework 2.0 程序 设计. 第 1 章 : .NET Framework 2.0 简介 第 2 章:公共语言运行库和类型 第 3 章:托管代码的编译和执行 第 4 章: 委托和事件 第 5 章:读取和写入文件 第 6 章:集合和泛型 第 7 章:数据的序列化 第 8 章: GDI+ 第 9 章 : 在 .NET Framework 2.0 中实现加密. 第 10 章: COM 组件与 .NET Framework 程序集之间的交互操作

eara
Télécharger la présentation

第4章 委托和事件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 委托和事件

  2. .NET Framework 2.0 程序设计 第 1 章: .NET Framework 2.0简介 第 2 章:公共语言运行库和类型 第 3 章:托管代码的编译和执行 第 4 章:委托和事件 第 5 章:读取和写入文件 第 6 章:集合和泛型 第 7 章:数据的序列化 第 8 章:GDI+ 第 9 章:在 .NET Framework 2.0中实现加密 第 10 章: COM 组件与.NET Framework程序集之间的交互操作 第 11 章:使用类型元数据 第 12 章:创建多线程应用程序和应用程序域 第 13 章:代码访问安全性 第 14 章:监视和调试应用程序 第 15 章:使用服务应用程序和电子邮件消息 第 16 章:创建全球化应用程序 第 17 章:配置和安装程序集

  3. 本章学习目标: 使用 Delegate 类控制组件间的交互 使用 Event 语句、EventHandler委托和EventArgs类控制组件间的交互 目标

  4. 第4章 委托和事件 • 委托 • 事件 • 小结 • 实验 • 习题

  5. 委托 4.1 委托 委托是引用类型,这与类和接口相似 。

  6. 步骤1:声明委托。 步骤2:创建 ReportPrinter 类,使用委托。 步骤3:创建委托调用的方法 。 间接调用应用程序方法 4.1.1 使用 Delegate 类间接调用应用程序方法 使用委托的步骤 : 代码示例C# 代码示例VB

  7. Delegate类的成员 4.1.1 使用 Delegate 类间接调用应用程序方法 Delegate类的成员

  8. Delegate类的成员 (续) 4.1.1 使用 Delegate 类间接调用应用程序方法 续表:

  9. . 匿名方法 协变 逆变 增强委托行为 4.1.2 使用新的 C# 2.0技术增强委托行为 C# 2.0 对委托的语言进行了某些增强,引入了匿名方法、协变和逆变。 代码示例C#

  10. 委托 事件 小结 实验 习题 第4章 委托和事件

  11. . 使用事件的好处 事件的工作方式 使用 Event 语句创建事件 EventHandler 委托的实现方法 自定义事件参数类 事件和委托的关系 事件 4.2 事件 代码示例C#

  12. 使用事件的好处 4.2.1 使用事件的好处 .NET Framework 通常会在对象发生某些情况时自动引发预构建的事件作为响应。 当用户在 UI 中单击自定义控件时,该控件就会触发 Click 事件。

  13. . 首先,必须在类中声明事件并确定将要使用的委托和参数 。 其次,必须定义在触发事件时要调用的委托。 最后,必须设计事件参数类,该参数类的实例会将信息传递给被调用的方法。 事件的工作方式 4.2.2 事件的工作方式 在程序中创建并使用自定义事件包含三个步骤 :

  14. 使用VB.NET实现 在VB.NET中,可以使用默认的委托或具有特定签名的自定义委托将一个事件声明为简单事件。 使用C#实现 在C#中,始终使用委托签名声明事件,但是也可使用诸如EventHandler等预定义的委托或具有特定签名的自定义委托。 使用 Event 语句创建事件 4.2.3 使用 Event 语句创建事件 .NET Framework 提供 Event 语句,可以在需要创建自定义事件时使用该语句。

  15. VB.NET 在VB.NET中有两种向EventHandler添加方法的途径。可以在设计时对方法使用 Handles关键字,也可以在运行时使用AddHandler语句。 C# C#中没有与VB.NET中的Handles语句等价的语句。要在 C# 中预订事件处理程序,可使用 Addition Assignment 运算符(+=)将方法添加到分配给事件的 EventHandler 委托中。 EventHandler 委托的实现 4.2.4 EventHandler 委托的实现

  16. 自定义事件参数类 4.2.5 自定义事件参数类 可以使用继承自 EventArgs的类将参数传递给处理事件的方法 。 每当想要将来自事件发布者的特定数据传递给预订者方法时,就必须使用继承自 EventArgs 基类的自定义类。 如果想要允许来自事件处理程序的反馈,可以提供一个可读/写的属性。 代码示例VB

  17. 事件和委托的关系 4.2.6 事件和委托的关系 事件和委托的使用流程

  18. 委托 事件 小结 实验 习题 第4章 委托和事件

  19. 小结 4.3 小结 本章主要介绍了.NET Framework的委托和事件。.NET Framework使用委托来实现事件驱动机制。委托是一个方法列表,调用委托的效果等同于调用此列表中所有的方法。事件可以看成是特殊的委托实例。

  20. 委托 事件 小结 实验 习题 第4章 委托和事件

  21. 实验 4.4 实验 参照实验手册,并在教师指导下完成实验报告。

  22. 委托 事件 小结 实验 习题 第4章 委托和事件

  23. 习题 4.5 习题 1. 你最近已阅读了有关在面向对象的编程中使用委托的资料,经理要求你对其他编程人员作个讲解。因此要创建一个有关委托的优点列表以说服其他编程人员使用委托,那么你打算向列表中添加使用委托的哪些优点? 请选择所有符合条件的答案。 A.委托允许将方法作为参数传递给其他方法 B.委托有助于更改方法的签名 C.委托有助于一次调用多个方法 D.委托有助于在异步编程中指定回调

  24. 习题(续) 4.5 习题 2. 你正在编写一个利用重载方法调用对不同类型的对象进行排序的应用程序。在程序中你想要通过使用 .NET Framework 2.0 中新增的泛型委托功能创建可调用任何重载方法的委托。该方法对两个数据类型相同的对象进行排序并返回较大的对象。你想要创建将用于间接调用这些方法的委托。 请选择一个最佳答案。 A. [C#]public delegate ItemType SortObjects<ItemType>(ItemType objA,ItemType objB); [VB.NET]Delegate Function SortObjects(Of ItemType)(ByVal objA As _ ItemType, ByVal objA As ItemType) As ItemType

  25. 习题(续) 4.5 习题 B. [C#]public delegate int SortObjects< ItemType >(ItemType objA, ItemType objB); [VB.NET]Delegate Function SortObjects (Of ItemType)(ByVal objA As _ ItemType, ByVal objA As ItemType) As Integer C. [C#]public delegate product SortObjects(product objA, product objB); [VB.NET]Delegate Function SortObjects(ByVal objA As product, ByVal _ objA As product) As product

  26. 习题(续) 4.5 习题 D. [C#]public delegate object SortObjects(object objA, object objB); [VB.NET]Delegate Function SortObjects(ByVal objA As Object, ByVal _ objA As Object) As Object

  27. 习题(续) 4.5 习题 3. 你正在创建允许用户构建自定义图形用户界面(GUI)的程序。你必须能对派生自 Control 类的各类自定义控件的实例进行排序。Control 类继承于 System.Object 类。以下哪个委托和方法签名正确使用了协变和逆变? 请选择一个最佳答案。 A. [C#]public delegate object SortObjects(object objA, object objB);public control SortObjects(control objA, control objB); [VB.NET]Delegate Function SortObjects(ByVal objA As Object, ByVal _ objA As Object) As ObjectPublic Function SortObjectsMeth(ByVal objA As Control, _ ByVal objA As Control) As Control

  28. 习题(续) 4.5 习题 B. [C#]public delegate control SortObjects(control objA, control objB);public object SortObjects(object objA, object objB); [VB.NET]Delegate Function SortObjects(ByVal objA As Control, ByVal objA _ As Control) As ControlPublic Function SortObjectsMeth(ByVal objA As Object, ByVal _ objA As Object) As Object C. [C#]public delegate control SortObjects(object objA, object objB);public object SortObjects(control objA, control objB); [VB.NET]Delegate Function SortObjects(ByVal objA As Object, ByVal objA _ As Object) As ControlPublic Function SortObjectsMeth(ByVal objA As Control, ByVal _ objA As Control) As Object

  29. 习题(续) 4.5 习题 D. [C#]public delegate object SortObjects(control objA, _ control objB);public control SortObjects(object objA, object objB); [VB.NET]Delegate Function SortObjects(ByVal objA As _ Control, ByVal objA As Control) As ObjectPublic Function SortObjectsMeth(ByVal objA _ As Object, ByVal objA As Object) As Control

  30. 习题 4.5 习题 4. EventHandler 类的预定义对象使用两个标准参数。以下哪些选项表示这些参数的类型? 请选择所有符合条件的答案。 A.Control B.Object C.EventArgs D. Sender

  31. 习题 4.5 习题 5. 若要通过使用 EventArgs 类将数据从事件发布者发送到事件的预订者,你将如何操作? 请选择一个最佳答案。 A.创建一个继承自 System.EventArgs 的自定义 EventArgs 类,并将新类作为自定义 EventHandler 委托声明的第二个参数的类型包含在声明中 B.扩展事件发布者的类以包含作为类的属性的数据 C.扩展事件预订者的类以包含作为类的属性的数据 D. 声明一个自定义的 EventHandler 类,该类使用想要作为第二个参数传递的数据的数据类型

  32. 习题 4.5 习题 6. 若想在运行时向特定事件的 EventHandler 委托添加几个方法,你将使用以下哪条语句呢? 请选择一个最佳答案。 A.在 Visual Basic 中使用 Handles 而在 C# 中使用 -= B.在 Visual Basic 中使用 Handles 而在 C# 中使用 += C.在 Visual Basic 中使用 AddHandler 而在 C# 中使用 -= D. 在 Visual Basic 中使用 AddHandler 而在 C# 中使用 +=

More Related