资源预览内容
第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
第9页 / 共14页
第10页 / 共14页
亲,该文档总共14页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章 泛型,本章讲述的主要内容 7.1 泛型的概念 7.2 泛型集合 7.3 泛型方法和泛型接口,7.1 泛型的概念,7.1.1 泛型的特点 1可重用性 在定义泛型类型时,可以不指明数据类型的这种特性使得代码的重用性大大提高。 2高效率 泛型在定义时并没有指明数据类型,而是在使用时才定义数据类型,因此编译器在编译时直接生成使用时指定的类型,不再进行装箱和拆箱的操作,大大提高了程序运行效率。 3类型安全 泛型集合对它所存储的对象做了类型的约束,不是它所允许存储的类型是无法添加到泛型集合中,因此泛型的类型是安全的。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 1. 泛型类的声明 泛型类的声明与其它类的声明方法相似,只需要在声明普通类的声明语句后面增加一个圆括号括起来的,由“Of”关键字引导的泛型占位符“T”即可。例如,下列代码声明了一个泛型类TClass。 Public Class TClass( Of T) 类体代码 End Class 其中,T为泛型占位符表示一个假设的类型。在定义了泛型类后,默认情况下T可以是任意数据类型,所以可以用实际的数据类型代替T来声明某个实际要使用的类型。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 2约束 虽然在泛型类的定义代码中应尽可能独立于类型,但有时可能必须要向泛型类提供某种数据类型的某项功能。例如,如果出于排序或对照的目的而希望比较两个项,则它们的数据类型必须实现IComparable接口,此时可通过向泛型类参数添加“约束”的方式来强制实施此要求。带有约束的泛型类声明的语法格式如下,它表示将泛型类的参数“约束”到(限定到)指定的类或接口。 访问修饰符 Class 泛型类名称(Of T As 类名称或接口名称) 类体代码 End Class,7.1 泛型的概念,7.1.2 泛型类的声明和使用 3泛型的命名约定 为了在程序中方便地区分泛型和非泛型类型,需要对泛型命名法则加以如下约定。 1) 泛型类型的名称用字母T作为前缀。 2) 如果没有特殊的要求,泛型类型名称允许使用任意合法标识符,如果程序中只使用了一个泛型类型,则一般可使用字符T作为泛型类型的名称。 3) 如果泛型类型有约束要求(例如必须实现一个派生于基类的接口),或者使用了两个或多个泛型类型,就应给泛型类型指定描述性名称。,7.1 泛型的概念,7.1.2 泛型类的声明和使用 4. 使用泛型 通常,在需要对多种数据类型进行操作,而且在编写代码时不知道有哪些类型需要进行该操作,也不知道将会有多少类型需要支持这样的操作,为了提高代码的复用率此时可以考虑使用泛型。 【演练7-1】设计一个泛型类TDisplayAll,该类具有一个泛型属性Value和一个构造函数。在窗体装入的事件过程中编写程序为泛型属性Value赋以不同类型的值,并通过标签控件显示其数据类型和值。 【演练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。,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)、FindLastIndex(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)泛型集合十分相似,唯一的不同是Dictionary泛型集合存储数据的方式与HashTable集合相同,采用Key/Vlue对(键/值对)来保存数据,相当于为List(Of T)泛型集合中各元素值增加一个编号字段,以保证无论该元素处于什么位置都能快速地找到该元素。 创建Dictionary泛型集合 与HashTable集合类相似,泛型集合Dictionary在使用时也需要使用New关键字创建其的实例对象,声明Dictionary泛型集合的语法格式为: Dim 对象名 As New Dictionary(Of TKey,TValue) 其中,TKey和TValue分别为Dictionary泛型集合中键的类型和值的类型。,7.2 泛型集合,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 泛型方法和泛型接口,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 其中,访问修饰符可以省略,“类型参数列表”表示尚未确定的数据类型,类似于方法中的形参列表,当具有多个类型参数时使用逗号分隔。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号