《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt

上传人(卖家):momomo 文档编号:6094200 上传时间:2023-05-27 格式:PPT 页数:24 大小:557.50KB
下载 相关 举报
《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt_第1页
第1页 / 共24页
《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt_第2页
第2页 / 共24页
《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt_第3页
第3页 / 共24页
《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt_第4页
第4页 / 共24页
《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、泛型可以针对不同的数据类型执行相同的代码,这意味着,在编写程序时不需要为每一种可能的数据类型定义单独的版本;而委托可以看做是面向对象函数指针的一种形式,它允许通过对函数进行引用的方法来间接地调用该函数。委托可用于与事件处理程序挂接以及将过程从一个过程传递到另一个过程。这两个概念是VB.NET 2008中比较复杂但是非常有用的概念。9.1 泛型9.2 委托泛型类型适应于对多种数据类型执行相同功能的单个编程元素。定义泛型类或过程时,无需为可能需要对其执行该功能的每个数据类型定义单独版本。就好比是带有可拆卸刀头的螺丝刀。检查需要拧动的螺丝,然后选择适合该螺丝的刀头(一字、十字、星形)。将正确的刀头插

2、入到螺丝刀柄上后,就可以使用螺丝刀执行完全相同的功能,即拧螺丝。螺丝刀就是一个泛型工具。创建一个泛型类与创建一个普通类非常类似,区别在于,泛型类需要使用Of关键字标识类型参数。类型参数是指在泛型类型定义中,在声明数据类型时为其提供的占位符。例如,下面代码声明了一个泛型类,与普通类的区别在于,类名后面使用了Of关键字,指明这是一个泛型类,该类实例化的时候需要为其提供数据类型。Public Class MyDirectionary(Of t)End Class首先,添加如下Imports语句。.NET Framework定义了几个代表常用泛型元素的泛型类、结构和接口,位于System.Collec

3、tions.Generic命名空间,提供字典、列表、队列和堆栈。Imports System.Collections.Generic下面代码创建了一个集合的泛型类。1 Public Class MyGenericCollection(Of ItemType)2 定义一个通用的集合3 Private Items As List(Of ItemType)4 5 建立构造函数6 Public Sub New()7 Items=New List(Of ItemType)8 End Sub9 返回集合中数据项的数量10 Public ReadOnly Property Count()As Integer

4、11 Get12 Return Items.Count13 End Get14 End Property15 得到或设置一个特定的数据项16 Default Public Property Item(ByVal Index As Integer)As ItemType17 Get18 Return Items(Index)19 End Get20 Set(ByVal value As ItemType)21 Items(Index)=value22 End Set23 End Property24 25 给集合添加新的数据项26 Public Sub Add(ByVal Value As It

5、emType)27 Items.Add(Value)28 End Sub29 30 从集合中删除数据项31 Public Sub RemoveAt(ByVal Item As Int32)32 Items.RemoveAt(Item)33 End Sub34 35 End Class使用上面代码中的泛型类与使用任何其他的类只有稍微的差别。首先需要实例化这个类,注意实例化的时候需要提供类型变量。类型变量是特定的数据类型,用于在通过泛型类型声明构造类型时替换类型参数。之后就可以使用它的方法、属性和事件等成员,与使用普通类相似。下面代码显示了使用9.1.1节定义的泛型类的典型示例。1 Private

6、 Sub btnTest_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles btnTest.Click创建泛型类的实例2 建立新集合 3 Dim StrCollect As New MyGenericCollection(Of String)4 5 在集合上执行某些事务6 StrCollect.Add(One)7 StrCollect.Add(Two)8 StrCollect.Add(Three)9 StrCollect.RemoveAt(1)10 11 显示一些统计信息12 MessageBox.S

7、how(Number of Entries:+StrCollect.Count.ToString()13 MessageBox.Show(Value of First Item:+StrCollect(0)14 End Sub除了使用.NET Framework提供的泛型类之外,还可以实现自己的泛型方法。例如,你想实现一些不与特定类型相关的一般算法时,泛型方法尤其有用。举个例子,典型的冒泡排序需要遍历数组中的所有项目,两两比较,并交换需要排序的数值。如果已经确定只要进行整数的排序,可以只简单地编写一个只能用于Integer类型的Swap方法。但是,如果想能够排序任何类型,就可以编写一个泛型Sw

8、ap方法。下面代码实现了一个泛型的Swap方法。1 Private Sub Swap(Of ItemType)(ByRef v1 As ItemType,ByRef v2 As ItemType)2 Dim temp As ItemType 3 temp=v1 4 v1=v2 5 v2=temp 6 End Sub委托是可用于调用其他对象方法的对象。由于它们与其他编程语言中所使用的函数指针相似,因此它们有时也被称为类型安全的函数指针。但与函数指针不同的是,Visual Basic委托是基于System.Delegate类的引用类型。可以把委托看作是面向对象函数指针的一种形式,它允许通过对函数进

9、行引用的方法来间接地调用该函数。委托可用于与事件处理程序挂接以及将过程从一个过程传递到另一个过程。要使用委托,首先要声明一个委托类型。委托类型与类一样,也是引用类型。委托的声明使用Delegate语句来实现 修饰符 Delegate Sub名称(参数列表)修饰符 Delegate Function 名称(参数列表)As 返回值类型 其中,修饰符用于指定哪些代码可以访问此委托。如果该委托返回值,则使用Fucntion关键字并指明返回值类型;否则,使用Sub关键字。其中,参数列表可选。下面代码声明了一个委托。声明委托public Delegate Function MathOperator(ByV

10、al x As Integer,ByVal y As Integer)As Integer下面代码中的两个方法均可使用MathOperator委托来引用。1 Public Class MathClass2 加法3 Public Function AddNumbers(ByVal x As Integer,ByVal y As Integer)As Integer4 Return x+y5 End Function6 减法7 Public Function SubtractNumbers(ByVal x As Integer,ByVal y As Integer)As Integer8 Retu

11、rn x-y9 End Function10 End ClassMathClass类中的两个方法AddNumbers和SubtractNumbers就都可以用MathOperator委托来引用,因为它们从参数列表和返回值上都与MathOperator委托声明一致。这也称为签名一致。事件是一个信号,它告知应用程序有情况发生。例如,用户单击窗体上的某个按钮时,窗体可能会引发一个Click事件,并调用一个处理该事件的过程。然而之前所有的示例中,引发事件以及事件与委托的绑定都是系统生成的。使用Event关键字在类、结构、模块和接口内部声明事件,代码如下。Event AnEvent(ByVal Even

12、tNumber As Integer)广播该消息的行为称为引发事件。任何能引发事件的对象都是事件发送方,也称事件源。窗体、控件和用户定义的对象都是事件发送器。开发人员也可以通过编程方式引发事件,在Visual Basic中,使用RaiseEvent语句引发事件,代码如下。RaiseEvent AnEvent(EventNumber)事件引发后就会调用相应的事件处理程序。在事件处理程序生效之前,首先必须使用Handles或AddHandler语句将它与事件关联,而这时就需要用到委托。通常,可以使用AddressOf运算符将方法与委托绑定。下面通过一个动态运算示例演示如何将方法与委托关联,然后通过

13、委托调用该方法。1 Public Class Form12 委托变量3 Private op As MathOperator=Nothing4 Private obj As MathClass=New MathClass()5 动态指定运算6 Private Sub tbAdd_CheckedChanged(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles rbAdd.CheckedChanged,rbSub.CheckedChanged7 If rbAdd.Checked Then8 Label1.Text=+

14、9 op=AddressOf obj.AddNumbers10 ElseIf rbSub.Checked Then11 Label1.Text=-12 op=AddressOf obj.SubtractNumbers13 Else14 Label1.Text=?15 op=Nothing16 End If17 End Sub18 单击=开始计算19 Private Sub btCal_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles btCal.Click20 If op Is Nothing Then21 MessageBox.Show(操作无效)22 Else23 tbResult.Text=op.Invoke(tbNum1.Text,tbNum2.Text)24 End If25 End Sub26 End Class

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 各类题库
版权提示 | 免责声明

1,本文(《Visual Basic NET 2008从基础到项目实战》课件9 泛型与委托.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|