《Visual Basic .NET程序设计教程 第2版 教学课件 ppt 作者 刘瑞新第7章 泛型》由会员分享,可在线阅读,更多相关《Visual Basic .NET程序设计教程 第2版 教学课件 ppt 作者 刘瑞新第7章 泛型(14页珍藏版)》请在金锄头文库上搜索。
1、第7章 泛型,本章讲述的主要内容 7.1 泛型的概念 7.2 泛型集合 7.3 泛型方法和泛型接口,7.1 泛型的概念,7.1.1 泛型的特点 1可重用性 在定义泛型类型时,可以不指明数据类型的这种特性使得代码的重用性大大提高。 2高效率 泛型在定义时并没有指明数据类型,而是在使用时才定义数据类型,因此编译器在编译时直接生成使用时指定的类型,不再进行装箱和拆箱的操作,大大提高了程序运行效率。 3类型安全 泛型集合对它所存储的对象做了类型的约束,不是它所允许存储的类型是无法添加到泛型集合中,因此泛型的类型是安全的。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 1. 泛型类的声明 泛型类的
2、声明与其它类的声明方法相似,只需要在声明普通类的声明语句后面增加一个圆括号括起来的,由“Of”关键字引导的泛型占位符“T”即可。例如,下列代码声明了一个泛型类TClass。 Public Class TClass( Of T) 类体代码 End Class 其中,T为泛型占位符表示一个假设的类型。在定义了泛型类后,默认情况下T可以是任意数据类型,所以可以用实际的数据类型代替T来声明某个实际要使用的类型。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 2约束 虽然在泛型类的定义代码中应尽可能独立于类型,但有时可能必须要向泛型类提供某种数据类型的某项功能。例如,如果出于排序或对照的目的而希望
3、比较两个项,则它们的数据类型必须实现IComparable接口,此时可通过向泛型类参数添加“约束”的方式来强制实施此要求。带有约束的泛型类声明的语法格式如下,它表示将泛型类的参数“约束”到(限定到)指定的类或接口。 访问修饰符 Class 泛型类名称(Of T As 类名称或接口名称) 类体代码 End Class,7.1 泛型的概念,7.1.2 泛型类的声明和使用 3泛型的命名约定 为了在程序中方便地区分泛型和非泛型类型,需要对泛型命名法则加以如下约定。 1) 泛型类型的名称用字母T作为前缀。 2) 如果没有特殊的要求,泛型类型名称允许使用任意合法标识符,如果程序中只使用了一个泛型类型,则一
4、般可使用字符T作为泛型类型的名称。 3) 如果泛型类型有约束要求(例如必须实现一个派生于基类的接口),或者使用了两个或多个泛型类型,就应给泛型类型指定描述性名称。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 4. 使用泛型 通常,在需要对多种数据类型进行操作,而且在编写代码时不知道有哪些类型需要进行该操作,也不知道将会有多少类型需要支持这样的操作,为了提高代码的复用率此时可以考虑使用泛型。 【演练7-1】设计一个泛型类TDisplayAll,该类具有一个泛型属性Value和一个构造函数。在窗体装入的事件过程中编写程序为泛型属性Value赋以不同类型的值,并通过标签控件显示其数据类型和值
5、。 【演练7-1】,7.2 泛型集合,7.2.1 List(Of T)泛型集合类 1. 创建 List(Of T) 集合 与ArrayList集合类相似,泛型集合List(Of T)在使用时也需要使用New关键字创建其实例,其语法格式为: Dim 对象名称 As New List(Of 数据类型)(泛型集合的初始容量) 例如,下列语句声明了一个名为“Score”的List(Of T)泛型集合对象,并指定数据类型为整型Integer。 Dim Score As New List(Of Integer) 省略了泛型集合的容量 需要说明的是,上述语句创建的Score泛型集合对象为空,且具有默认容量0
6、。,7.2 泛型集合,7.2.1 List(Of T)泛型集合类 2. List(Of T)的常用方法 用于操作List(Of T)泛型集合的方法有很多,但大多数与ArrayList集合的方法相同,这里不再赘述。例如: Dim list As New List(Of String) list.Add(“zhangsan“) list.Insert(0, “lisi“) list.Remove(“zhangsan“) List(Of T)泛型集合中实现查询功能的一些方法: Find(match)、FindAll(match)、FindIndex(match)、FindLast(match)、Fi
7、ndLastIndex(match),7.2 泛型集合,7.2.1 List(Of T)泛型集合类 3. List(Of T)与ArrayList的比较 如果对List(Of T)泛型集合类的类型使用引用类型,则两个类的行为是完全相同的。但是,如果对类型使用值类型,则建议尽量使用List(Of T)泛型集合类。List(Of T)泛型集合和ArrayList类似,只是List(Of T)无须类型转换,它们的相同点与不同点,见表7-2。,7.2 泛型集合,7.2.2 Dictionary泛型集合类 Dictionary泛型集合的作用与List(Of T)泛型集合十分相似,唯一的不同是Dictio
8、nary泛型集合存储数据的方式与HashTable集合相同,采用Key/Vlue对(键/值对)来保存数据,相当于为List(Of T)泛型集合中各元素值增加一个编号字段,以保证无论该元素处于什么位置都能快速地找到该元素。 创建Dictionary泛型集合 与HashTable集合类相似,泛型集合Dictionary在使用时也需要使用New关键字创建其的实例对象,声明Dictionary泛型集合的语法格式为: Dim 对象名 As New Dictionary(Of TKey,TValue) 其中,TKey和TValue分别为Dictionary泛型集合中键的类型和值的类型。,7.2 泛型集合,
9、7.2.2 Dictionary泛型集合类 2. 使用Dictionary泛型集合 【演练7-3】使用Dictionary泛型集合设计一个简易的学生信息管理程序。 【演练7-3】,7.3 泛型方法和泛型接口,7.3.1 泛型方法 当一个方法具有它自己的类型参数列表时,称其为泛型方法。一般情况下,泛型方法包括两个参数列表,一个泛型类型参数列表和一个形参列表。其中,类型参数可以作为返回类型或形参的类型出现。泛型方法定义格式如下: 访问修饰符 Function | Sub方法名(Of 类型参数列表)(形参列表) As返回值类型 方法体语句 End Function | Sub,7.3 泛型方法和泛型
10、接口,7.3.2 泛型接口 1. .NET Framework中提供的主要泛型接口 ICollection 、IComparer 、IDictionaryTKey, TValue、 IEnumerableT、IEnumeratorT 、IEqualityComparerT、IListT等。 2. List(Of T)排序和IComparer泛型接口 【演练7-5】,7.3 泛型方法和泛型接口,7.3.3 自定义泛型接口 在Visual Studio中开发人员除了可以使用.NET Framework中提供的大量泛型接口外,还可以根据实际需要自定义泛型接口。创建自定义泛型接口的语法格式如下: 访问修饰符 Interface 接口名(Of 类型参数列表) 接口成员 End Interface 其中,访问修饰符可以省略,“类型参数列表”表示尚未确定的数据类型,类似于方法中的形参列表,当具有多个类型参数时使用逗号分隔。,