C#windows编程基础.ppt_第1页
C#windows编程基础.ppt_第2页
C#windows编程基础.ppt_第3页
C#windows编程基础.ppt_第4页
C#windows编程基础.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,集合、索引器与泛型,集合 索引器 泛型,集合,集合概述 选择集合类 集合的创建与操作,集合概述,集合是通过高度结构化的方式存储任意对象的类,与无法动态调整大小的数组相比,集合不仅能随意调整大小,而且对存储或检索存储在其中的对象提供了更高级的方法。 NET Framework 2.0引入了泛型集合(如对象列表List)和强类型非泛型集合(字符串集合StringCollection),在使用泛型集合或非强类型非泛型集合时,要保证元素的类型是集合所需的类型。 System.Collections命名空间的ICollection接口定义了所有非泛型集合的大小和操作方法,包括添加、移除与搜索集合元素等。 System.Collections命名空间还包含了ICollection接口最常用的已实现的集合类。,选择集合类,.NET Framework的集合类 集合类的选择,.NET Framework的集合类,(1) 常用集合 (2) 位集合 包括BitArray和BitVector32 (3) 专用集合 包括StringCollection、StringDictionary和NameValueCollection等,集合类的选择,选择集合类时,一般要考虑以下问题: (1)是否需要一个序列列表,需要先进先出行为时可使用 Queue 队列类,在需要后进先出行为时可使用 Stack栈类。 (2)是否需要随机访问集合中的元素,此时不能选择Queue 队列类、Stack栈类、LinkedList 双向链表类 (3)是否需要通过索引访问每个元素,只有ArrayList、StringCollection等是从索引为零的元素开始逐个访问集合元素。Hashtable、Dictionary通过元素的键(即元素名字)提供对元素的访问。而NameValueCollection 类和SortedList 泛型类通过其元素的从零开始的索引,或者通过其元素的键提供对元素的访问。 (4)是否包含一个值、一个键和一个值的集合,还是一个键和多个值的集合。其中,“一个值”的集合是一种基于 IList 列表接口派生的集合,“一个键和一个值”的集合是一种基于IDictionary字典接口的集合,“一个键和多个值”的集合是 NameValueCollection 类。,集合类的选择(续),(5)是否需要用与输入元素方式不同的方式对元素排序。Hashtable 按其元素的哈希代码对元素排序,SortedList以及 SortedDictionary根据 IComparer 实现按键对元素的排序,而ArrayList提供 Sort 排序方法。 (6)是否需要信息的快速搜索和检索,对于小集合(10个元素或更少),ListDictionary 比 Hashtable 快,SortedDictionary 泛型类提供比 Dictionary 泛型类更快的查找。 (7)是否需要只接受字符串的集合,如StringCollection和 StringDictionary等。,集合的创建与操作,1. 动态数组类ArrayList 2. 队列Queue 3. 栈Stack 4. 哈希表Hashtable 5. 字符串字典StringDictionary 6. 键/值对集合NameValueCollection,1. 动态数组类ArrayList,(1) ArrayList与Array的区别 Array 的大小是固定的,而 ArrayList的大小可根据需要自动扩充; 在Array中一次只能获取或设置一个元素的值,而在ArrayList中允许添加、插入或移除某一范围的元素; Array 的下限可以自定义,而ArrayList的下限始终为零; Array 可以具有多个维度,而 ArrayList始终只是一维的; Array 位于 System 命名空间中,ArrayList 位于 System.Collections 命名空间中。 (2) 创建动态数组: ArrayList 列表对象名 = new ArrayList( ); 例如, ArrayList list = new ArrayList(); list.Add(“罗福强“); list.Add(30);,2. 队列Queue,队列的特点 一种先进先出的数据结构,当插入或删除对象时,对象从队列的一端插入,从另外一端移除 创建队列对象 Queue 队列名 = new Queue(队列长度,增长因子); 说明,队列长度默认为32,增长因子默认为2.0(即每当队列容量不足时,队列长度调整为原来的2倍) 注意,由于调整队列的大小需要付出一定的性能代价,因此建议在构造队列时指定队列的长度。 队列包括Enqueue、Dequeue、Peek、Clear和Contains等方法。其中,Enqueue和Dequeue每操作一次只能添加或删除一个数据。 例如: Queue q = new Queue(50,3.0); q.Enqueue(“董涛“); q.Enqueue(“徐磊“);,构造函数,Queue举例,3. 栈Stack,栈的特点: 一种先进后出的数据结构,这种数据结构在插入或删除对象时,只能在栈顶插入或删除。 创建栈对象: Stack 栈名 = new Stack( ); 栈包括Push、Pop、Peek、Clear和Contain等方法。其中,Push和Pop每操作一次只能添加或删除一个数据。 例如: Stack s = new Stack(); s.Push(“成都“); s.Push(“四川“);,构造函数,Stack举例,4. 哈希表Hashtable,哈希表又称散列表,表示键/值对的集合。(建不能为空,值可以) 哈希表的特点:在保存集合元素时,首先要根据键自动计算哈希代码,以确定该元素的保存位置,再把元素的值放入相应位置所指向的存储桶中。查找时,再次通过键所对应的哈希代码到特定存储桶中搜索。 创建哈希表对象 Hashtable 哈希表名 = new Hashtable(哈希表长度,增长因子); 说明,默认长度为0,默认增长因子为1.0 哈希表包括Add、Remove、Clear和Contains等方法。其中, Add方法需要两个参数,一个是键,一个是值;Remove方法只需要一个键名参数。 例如:Hashtable h = new Hashtable(); h.Add(1001,“李天军“); h.Add(1002,“张凯“); h1001 可得到“李天军”,构造函数,HashTable构造函数太多,不一一列举。相见CSDN帮助文档。,HashTable举例,5. 字符串字典StringDictionary,字符串字典StringDictionary是一种把键和值强类型化为字符串而不是对象的哈希表。其中,键不能为null,且不区分大小写。 例如: StringDictionary myCol = new StringDictionary(); myCol.Add( “姓名“, “罗福强“ ); myCol.Add( “性别“, “男“ ); foreach ( DictionaryEntry de in myCol ) Console.WriteLine( “0t 1n“, de.Key, de.Value );,6. 键/值对集合NameValueCollection,键/值对集合NameValueCollection表示元素为键名/键值对的集合,且元素的键名和键值均为字符串。(一个键可对应多个值) 例如: NameValueCollection myCol = new NameValueCollection(); myCol.Add( “姓名“, “罗福强“ ); myCol.Add( “性别“, “男“ ); foreach ( String s in myCol.AllKeys ) Console.WriteLine( “0t1“, s,myCols); for( int i = 0; i myCol.Count; i+ ) Console.WriteLine( “0t1“, myCol.getKey(i),myCol.get(i); 演示(源代码见帮助文档),索 引 器,索引器的定义与使用 接口中的索引器 索引器与属性的比较,索引器的定义与使用,索引器的定义 索引器的使用,索引器的定义,索引器是一种特殊的类成员,它能够让对象以类似数组的方式来存取,使程序看起来更为直观,更容易编写。 一般形式如下: 修饰符 数据类型 this索引类型 index get /获得属性的代码 set /设置属性的代码 说明: 其中的数据类型是相关数组或集合的类型;索引类型表示数组或集合元素的类型;this表示操作本对象的数组或集合成员,可以简单把它理解成索引器的名字,因此索引器不能具有用户定义的名称,索引器示例,class Z /可容纳100个整数的整数集 private long arr = new long100; public long thisint index /声明索引器 get if (index = 100) return 0; else return arrindex; set if (!(index = 100) arrindex = value; ,索引器的使用,通过索引器可以存取类的实例的数组成员,操作方法与数组相似。 一般形式如下: 对象名索引 其中,索引的数据类型必须与索引器的索引类型相同。 例如,Z z = new Z(); /Z是包含索引器的类 z0 = 100; z1 = 101;,接口中的索引器,在接口中也可以声明索引器。 接口索引器与类索引器的区别有两个: 一是接口索引器不使用修饰符; 二是接口索引器只包含访问器get或set,没有实现语句。 例如:,索引器与属性的比较,泛型,一、泛型概述 二、泛型接口、泛型类及泛型方法,一、泛型概述,1. 什么是泛型 2. 为什么要引入泛型 3. .NET Framework 2.0 的泛型类,1. 什么是泛型,泛型是通过“参数化类型”来实现在同一则代码中操作多种数据类型。 泛型类型是一种编程范式,它利用“参数化类型”将类抽象化,从而实现更为灵活的复用。 泛型赋予了代码更强的安全性、更好的复用、更高的效率和更清晰的约束,2. 为什么要引入泛型,通常在讨论数组时都需要预设一个前提,即到底要解决的是整数、小数、还是字符串的运算问题。因此,在使用数组时需要首先确定数组的类型,然后再把相同类型的数据放入数组中。例如,把100个整数存入数组中,得到一个整型数组,而把100个自定义的Student对象存入数组中,得到一个对象型或Student型数组。 利用数组来管理数据,虽然直观、容易理解,但存在很大的局限性,仍然需要重复编写几乎完全相同的代码来完成排序和查找操作。为此,C#提供了一种更加抽象的数据类型泛型,以克服数组的不足。当利用泛型来声明这样一个更抽象的数据类型之后,再也不需要针对诸如整数、小数、字符、字符串等数据重复编写几乎完全相同的代码。 具体思路如下:首先声明这种泛型数据类型,声明时不用指定要处理的数据的类型,只讨论抽象的数据操作,如排序、查找等。在实际引用这种泛型数据类型时,先确定要处理的数据类型,再执行相应的操作。因此,泛型是一种“泛泛而谈”的数据类型。,3. .NET Framework 2.0 的泛型类,(1) .Net Framework提供的泛型集合类,包括List、Queue、Stack、Dictionary等,这些集合类实现了增加、删除、清除、排序和返回集合元素值的操作,且这些操作方法对任意类型的数据都有效。 (2) 列表List的使用 格式:List 对象名 = new List( ); 例如:List list = new List(); list.Add(“罗福强“); list.Add(“30“); (3)字典Dictionary的使用 格式:Dictionary 对象名 = new Dictionary( ); 例如: Dictionary dic = new Dictionary(); dic.Add(“姓名“, “罗福强“); dic.Add(“性别“, “男“);,二、泛型接口、泛型类及泛型方法,1. 泛型接口 2. 泛型类 3. 泛型方法,1. 泛型接口,(1) 泛型接口通常用来为泛型集合类或者表示集合元素的泛型类定义接口。对于泛型类来说,从泛型接口派生可以避免值类型的装箱和拆箱操作。 (2) .Net Framework的泛型接口 (3) 自定义泛型接口的一般形式 访问修饰符 interface 接口名 /接口成员 例如: interface IDate ,2. 泛型类,当一个类的操作不针对特定或具体的数据类型时,可把这个类声明为泛型类。泛型类最常用于集合,如链接列表、哈希表、堆栈、队列和树等。 一般情况下,创建泛型类的过程为:从一个现有的具体类开始,逐一将每个类型更改为类型参数,一直达到通用化和可用性的最佳平衡。 定义泛型类的一般形式 其中,“类型参数列表”不指定数据类型,当具有多个类型参数时使用逗号分隔。“类型参数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论