Visual C#.NET程序设计教程 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)

上传人:E**** 文档编号:89427900 上传时间:2019-05-25 格式:PPT 页数:41 大小:551KB
返回 下载 相关 举报
Visual C#.NET程序设计教程 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)_第1页
第1页 / 共41页
Visual C#.NET程序设计教程 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)_第2页
第2页 / 共41页
Visual C#.NET程序设计教程 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)_第3页
第3页 / 共41页
Visual C#.NET程序设计教程 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)_第4页
第4页 / 共41页
Visual C#.NET程序设计教程 第2版  工业和信息化普通高等教育“十二五”规划教材立项项目  教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Visual C#.NET程序设计教程 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)》由会员分享,可在线阅读,更多相关《Visual C#.NET程序设计教程 第2版 工业和信息化普通高等教育“十二五”规划教材立项项目 教学课件 ppt 作者 罗福强 白忠建 杨剑 C# Ch6(人邮)(41页珍藏版)》请在金锄头文库上搜索。

1、2019/5/25,第六章 集合、索引器与泛型,1. 总体要求 了解.NET类库中的集合类,初步掌握常用集合的创建和操作方法。 理解索引器的概念,能区别索引器与属性,掌握索引器的定义与使用。 了解泛型的相关概念,初步掌握泛型接口、泛型类、泛型属性和泛型方法的使用。 2. 相关知识点 熟悉类和数组的定义和使用。 熟悉类的方法成员的定义与使用等基本操作。,3. 学习重点 集合、索引器、泛型的定义与使用。 4. 学习难点 索引器的作用、定义与使用方法 泛型的概念和意义,泛型的定义和使用方法,第六章 集合、索引器与泛型,2019/5/25,第六章 集合、索引器与泛型,主要内容,索引器,泛型,6.3,6

2、.2,6.1 集合,6.1.1 集合概述 6.1.2 ArrayList 6.1.3 哈希表Hashtable 6.1.4 栈和队列,6.1.1 集合概述,集合是通过高度结构化的方式存储任意对象的类 集合不仅能随意调整大小,而且对存储或检索存储在其中的对象提供了更多的方法。集合可以把一组类似的对象组合在一起。 对象类型的集合位于System.Collections命名空间;集合类的功能是通过实现System.Collections命名空间中的接口而获得的。,6.1.1 集合概述,.NET Framework提供的常用集合包括数组、列表、哈希表、字典、队列和堆栈等基本类型,还包括有序列表、双向链

3、表和有序字典等派生集合类型。 .NET Framework也提供了一些专用集合用于处理特定的元素类型 StringCollection是字符串集合,由若干个字符串组成。字符串集合与字符串数组的区别在于,字符串集合提供了大量的可直接调用的方法,包括Add(添加字符串)、 Clear(清空集合)、Contains(是否包含特定字符串)、IndexOf(搜索特定字符串)、Insert(插入字符串)和Remove(移除特定字符串)等。,6.1.2 ArrayList,ArrayList是一个可动态维护长度的集合,它不限制元素的个数和数据类型,所以可以把任意类型的数据保存到ArrayList集合中。数组

4、类Array与动态数组类ArrayList的主要区别如下: (1) Array的大小是固定的,而ArrayList的大小可根据需要自动扩充; (2) 在Array中一次只能获取或设置一个元素的值,而在ArrayList中允许添加、插入或移除某一范围的元素; (3) Array的下限可以自定义,而ArrayList的下限始终为零; (4) Array可以具有多个维度,而 ArrayList始终只是一维的; (5) Array 位于System命名空间中,ArrayList 位于System.Collections 命名空间中。,6.1.2 ArrayList,1ArrayList的初始化 注意,

5、ArrayList的容量是ArrayList对象初始可以容纳的元素数,这里的容量并不是固定的。向ArrayList添加元素时,将根据需要自动增大容量。 创建动态数组对象的一般形式如下: ArrayList 列表对象名 = new ArrayList(参数); 例如: ArrayList AlBooks = new ArrayList(); ArrayList AlBook = new ArrayList(5);,6.1.2 ArrayList,2ArrayList中添加元素 ArrayList使用Add方法可以在集合的结尾处添加一个对象,Add方法的原型如下: int Add(Object v

6、alue) 该方法将返回添加了value处的索引值。另外,如果集合容量不足以添加新的对象,则会自动重新分配内部数组增加集合的容量,并在添加新元素之前将现有元素复制到新数组中。我们可以使用Count属性获取ArrayList 中实际包含的元素数。例如: ArrayList AlBooks = new ArrayList(); Book bk = new Book(“Visual C#.NET程序设计教程“, 32); AlBooks.Add(bk);,6.1.2 ArrayList,3访问ArrayList中的元素 ArrayList集合可以通过索引来访问其中的元素,其形式为 (类型) Arra

7、yListindex /按指定索引(下标)取得对象 需要注意的是,由于ArrayList中可以添加Object类型的对象,在添加时,相当于一次装箱操作,所以在访问时,需要一次需要类型转换,把Object类型的对象转换成指定类型,这相当于一次折箱。,6.1.2 ArrayList,4删除ArrayList中的元素 ArrayList可以通过Remove、RemoveAt和Clear方法来删除ArrayList的元素,其形式为: void Remove( Object obj) /删除指定对象名的对象 void RemoveAt(int index) /删除指定索引的对象 void Clear()

8、 /清除集合内的所有元素,6.1.2 ArrayList,5向ArrayList中插入元素 可以使用Insert方法将元素插入到ArrayList的指定索引处。其形式为: void Insert( int index, Object value) /元素插入到将集合中的指定索引处 在插入后,ArrayList会自动调整索引,该元素后面元素的索引值会自动增加。,6.1.2 ArrayList,6遍历ArrayList中的元素 ArrayList可以使用和数组类似的方式对集合中的元素进行遍历 for (int i = 0; i AlBooks.Count; i+) Book bkFor = (Bo

9、ok)AlBooksi; lblShow.Text += “n“ + bkFor.GetMessage(); 也可以用foreach 方式进行遍历: foreach (object bko in AlBooks) Book bkForeach = (Book)bko; lblShow.Text += “n“ + bkForeach.GetMessage(); ,6.1.2 ArrayList,【实例6-1】利用ArrayList进行集合的增、删、插入和遍历。,6.1.3 哈希表,哈希表又称散列表,Hashtable类是System.Collections命名空间的类,表示键/值对的集合。在使用

10、哈希表保存集合元素(一种健/值对)时,首先要根据键自动计算哈希代码,以确定该元素的保存位置,再把元素的值放入相应的存储位置中。查找时,再次通过键计算哈希代码,然后到相应的存储位置中搜索,这样将大大减少为查找一个元素进行比较的次数。 创建哈希表对象的一般形式如下: Hashtable 哈希表名 = new Hashtable(哈希表长度,增长因子); 其中,如果不指定哈希表长度,则默认容量为0,当向 Hashtable 中添加元素时,哈希表长度通过重新分配按需自动增加。增长因子表示每调整一次增加容量多少倍,默认的增长因子为1.0。,6.1.3 哈希表,【实例6-2】利用Hashtable进行集合

11、的增、删和遍历。,6.1.4 栈和队列,1栈Stack Stack类实现了先进后出的数据结构,这种数据结构在插入或删除对象时,只能在栈顶插入或删除。 创建栈对象的一般形式如下: Stack 栈名 = new Stack(); Stack类提供了栈常用操作方法,包括在栈顶添加数据、移除栈顶数据、返回栈顶数据、清空栈和检查是否包含某个数据等,方法名分别为Push、Pop、Peek、Clear和Contains。其中,Push和Pop每操作一次只能添加或删除一个数据。,6.1.4 栈和队列,2队列Queue Queue类实现了先进先出的数据结构,这种数据结构把对象放进一个等待队列中,当插入或删除对象

12、时,对象从队列的一端插入,从另外一端移除。 队列可以用于顺序处理对象,因此队列可以按照对象插入的顺序来存储。 创建队列对象的一般形式如下: Queue 队列名 = new Queue(队列长度,增长因子); 其中,队列长度默认为32,即允许队列最多存储32个对象。由于调整队列的大小需要付出一定的性能代价,因此建议在构造队列时指定队列的长度。增长因子默认为2.0,即每当队列容量不足时,队列长度调整为原来的2倍,可重新设置增长因子的大小。,6.2 索引器,6.2.1 索引器的定义与使用 6.2.2 索引器与属性的比较,返回,6.2.1 索引器的定义与使用,1索引器的定义 C#中的类成员可以是任意类

13、型,包括数组或集合。当一个类包含了数组或集合成员时,索引器将大大简化对数组或集合成员的存取操作。,6.2.1 索引器的定义与使用,定义索引器的方式与定义属性有些类似,其一般形式如下 修饰符 数据类型 this索引类型 index get /获得属性的代码 set /设置属性的代码 ,6.2.1 索引器的定义与使用,2索引器的使用 通过索引器可以存取类的实例的数组成员,操作方法与数组相似,一般形式如下: 对象名索引 其中,索引的数据类型必须与索引器的索引类型相同。 【实例6-3】利用前面定义的索引器进行照片的添加和查询,6.2.1 索引器的定义与使用,3接口中的索引器 在接口中也可以声明索引器,

14、接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器get或set,没有实现语句。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器get和set均不能省略;如果是只读的,省略set访问器;如果是只写的,省略get访问器。 例如: public interface IAddress string thisint index get; set; /声明索引器 string Address get; set; /声明属性 string Answer(); /声明方法 ,6.2.2 索引器与属性的比较,索引器与属性都是类的成员,语法上非常类似

15、。索引器一般用在自定义的集合类中,通过使用索引器来操作集合对象就如同使用数组一样简单;而属性可用于任何自定义类,它增强了类的字段成员的灵活性。,6.3 泛型,6.3.1 泛型概述 6.3.2 泛型集合 6.3.3 泛型类、泛型方法和泛型接口,返回,6.3.1 泛型概述,利用数组来管理数据,虽然直观、容易理解,但存在很大的局限性,仍然需要重复编写几乎完全相同的代码来完成排序和查找操作。为此,C#提供了一种更加抽象的数据类型泛型,以克服数组的不足。当利用泛型来声明这样一个更抽象的数据类型之后,再也不需要针对诸如整数、小数、字符、字符串等数据重复编写几乎完全相同的代码。具体思路如下: 首先声明这种泛

16、型数据类型,声明时不用指定要处理的数据的类型,只讨论抽象的数据操作,如排序、查找等。在实际引用这种泛型数据类型时,先确定要处理的数据类型,再执行相应的操作。因此,泛型是一种“泛泛而谈”的数据类型。,6.3.1 泛型概述,泛型的另一个优点是“类型安全”,上面提到的集合类是没有类型化的,以ArrayList为例,继承自System.Object的任何对象都可以存储在ArrayList中,下面的例子在ArrayList类型的集合中添加一个整数、一个字符串和一个Student类型的对象: ArrayList list = new ArrayList(); list.Add(44); list.Add(“mystring“); list.Add(new Student(“令狐冲“,1001);,6.3.1 泛型概述,如果这个集合使用下面的foreach语句遍历,而该forea

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号