分享
分销 收藏 举报 申诉 / 37
播放页_导航下方通栏广告

类型C#程序设计经典教程PPT.ppt

  • 上传人:快乐****生活
  • 文档编号:10040833
  • 上传时间:2025-04-19
  • 格式:PPT
  • 页数:37
  • 大小:634.50KB
  • 下载积分:12 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C# 程序设计 经典 教程 PPT
    资源描述:
    Click to edit Title Slide,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,1,C#程序设计经典教程,1,第六章,集合、索引器与泛型,1.,总体要求,了解,.NET,类库中的集合类,初步掌握常用集合的创建和操作方法。,理解索引器的概念,能区别索引器与属性,掌握索引器的定义与使用。,了解泛型的相关概念,初步掌握泛型接口、泛型类、泛型属性和泛型方法的使用。,2,.,相关知识点,熟悉类和数组的定义和使用。,熟悉类的方法成员的定义与使用等基本操作。,2,3.,学习重点,集合、索引器、泛型的定义与使用。,4.,学习难点,索引器的作用、定义与使用方法,泛型的概念和意义,泛型的定义和使用方法,第六章,集合、索引器与泛型,3,第六章,集合、索引器与泛型,主要内容,6,.1,集合,6,.2,索引器,6,.3,泛型,4,6.1,集合,6.1.1,集合概述,6.1.2 ArrayList,6.1.3,哈希表,Hashtable,6.1.4,栈和队列,5,6.1.1,集合概述,集合能随意调整大小,集合可以把一组类似的对象组合在一起。任何类型的对象都可被组合到一个,Object,类型的集合中,并通过,C#,的,foreach,语句来访问其中的每一个对象。操作过程中,MyClass,的对象与,Object,对象之间,MyClass mcObj;,装箱:,Object obj=mcObj (,无需显式转换,),拆箱:,mcObj=,(,MyClass,),obj,(事先装箱的),对象类型的集合位于,System.Collections,命名空间;,6,6.1,数组类,Array,数组是简单集合,System.Array,类是所有数组的基类,(,特殊类,不能用于派生,),public abstract class,Array,:,ICloneable,IList,/,类体:实现了多个接口,/,(数组操作的常用属性和方法,多为静态),interface ICollection,int Count get;,void CopyTo(Array array,int index);,bool IsSynchronizedget;,object SynchRootget;,interface ICloneable,object Clone();,interface IList:,Collection,IEnumerable,int Add(objdect value);,void Clear();,bool Contains(object value);,int IndexOf(object value);,void Remove(object key);,void RemoveAt(int index);,void Insert(int index,object value);,interface IEnumerator,Object,Current get;,bool,MoveNext(),;,void,Reset(),interface IEnumerable,/foreach,遍历的基础,IEnumerator,Getenumerator();,public static void Main(),int a=new int 3;,Array b=Array.CreateInstance(typeof(int),3);,for(int i=0;i3;i+),a I =2*i;b.SetValue(3*i,i);,foreach(int x in a),console.Write(“0 ”,x);,foreach(int x in b),console.Write(“0 ”,x);,接口中的方法:,默认是,public abstract,的。,继承接口的类:,必须实现接口中的所有属性和方法,否则该类是抽象的。,7,6.1.4,栈和队列,1,栈,Stack,Stack,类实现了先进后出的数据结构,,这种数据结构在插入或删除对象时,,只能在栈顶插入或删除。,创建栈对象的一般形式如下:,Stack,栈名,=new Stack();,Stack,类提供了栈常用操作方法,包括在栈顶添加数据、移除栈顶数据、返回栈顶数据、清空栈和检查是否包含某个数据等,方法名分别为,Push,、,Pop,、,Peek,、,Clear,和,Contains,。其中,,Push,和,Pop,每操作一次只能添加或删除一个数据。,a1,a2,an,栈底,栈顶,出栈,进栈,8,6.1.4,栈和队列,2,队列,Queue,Queue,类实现了先进先出的数据结构,这种数据结构把对象放进一个等待队列中,当插入或删除对象时,对象从队列的一端插入,从另外一端移除。,队列可以用于顺序处理对象,因此队列可以按照对象插入的顺序来存储。,创建队列对象的一般形式如下:,Queue,队列名,=new Queue(,队列长度,,增长因子,);,其中,队列长度默认为,32,。增长因子默认为,2.0,,即每当队列容量不足时,队列长度调整为原来的,2,倍,可重新设置增长因子的大小。,a1 a2 a3 an,队头,队尾,出队,入队,9,10,集合类的选择,选择集合类时,一般要考虑以下问题:,(,1,)是否需要一个序列列表,需要先进先出行为时可使用,Queue,队列类,在需要后进先出行为时可使用,Stack,栈类。,(,2,)是否需要随机访问集合中的元素,此时不能选择,Queue,队列类、,Stack,栈类、,LinkedList,双向链表类,(,3,)是否需要通过索引访问每个元素,只有,ArrayList,、,StringCollection,等是从索引为零的元素开始逐个访问集合元素。,Hashtable,、,Dictionary,通过元素的键(即元素名字)提供对元素的访问。而,NameValueCollection,类和,SortedList,泛型类通过其元素的从零开始的索引,或者通过其元素的键提供对元素的访问。,(,4,)是否包含一个值、一个键和一个值的集合,还是一个键和多个值的集合。其中,“一个值”的集合是一种基于,IList,列表接口派生的集合,“一个键和一个值”的集合是一种基于,IDictionary,字典接口的集合,“一个键和多个值”的集合是,NameValueCollection,类。,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,11,集合类的选择,(,续,),(,5,)是否需要用与输入元素方式不同的方式对元素排序。,Hashtable,按其元素的哈希代码对元素排序,,SortedList,以及,SortedDictionary,根据,IComparer,实现按键对元素的排序,而,ArrayList,提供,Sort,排序方法。,(,6,)是否需要信息的快速搜索和检索,对于小集合(,10,个元素或更少),,ListDictionary,比,Hashtable,快,,SortedDictionary,泛型类提供比,Dictionary,泛型类更快的查找。,(,7,)是否需要只接受字符串的集合,如,StringCollection,和,StringDictionary,等。,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,12,三、集合的创建与操作,1.,动态数组类,ArrayList,2.,队列,Queue,3.,栈,Stack,4.,哈希表,Hashtable,5.,字符串字典,StringDictionary,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,1.,动态数组类,ArrayList,ArrayList,:可以看作是能够自动增长容量的动态数组,它实现了,IList,接口。,(1),Capacity,集合容量,读写属性,(2),Count,获取列表中实际包含元素的个数,(3),Add(),方法:列表末尾添加元素,(4),Insert(),方法:列表指定位置添加元素,(5),Remove(),方法:移除特定对象,(6),RemoveAt(),方法:根据索引值移除对象,13,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,14,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);,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,15,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(,徐磊,);,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,16,3.,栈,Stack,栈的特点:,一种先进后出的数据结构,这种数据结构在插入或删除对象时,只能在栈顶插入或删除。,创建栈对象:,Stack,栈名,=new Stack();,栈包括,Push,、,Pop,、,Peek,、,Clear,和,Contain,等方法。其中,,Push,和,Pop,每操作一次只能添加或删除一个数据。,例如:,Stack s=new Stack();,s.Push(,成都,);,s.Push(,四川,);,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,17,4.,哈希表,Hashtable,哈希表又称散列表,表示键,/,值对的集合。,哈希表的特点:,在保存集合元素时,首先要根据键自动计算哈希代码,以确定该元素的保存位置,再把元素的值放入相应位置所指向的存储桶中。查找时,再次通过键所对应的哈希代码到特定存储桶中搜索,。,创建哈希表对象,Hashtable,哈希表名,=new Hashtable(,哈希表长度,增长因子,);,说明,默认长度为,0,,默认增长因子为,1.0,哈希表包括,Add,、,Remove,、,Clear,和,Contains,等方法。,其中,,Add,方法需要两个参数,一个是键,一个是值;,Remove,方法只需要一个键名参数。,例如:,Hashtable h=new Hashtable();,h.Add(1001,李天军,);h.Add(1002,张凯,);,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,18,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);,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,6.2,索引器,6.2.1,索引器的定义与使用,6.2.2,索引器与属性的比较,返回,19,6.2.1,索引器的定义与使用,1,索引器的定义,C#,中的类成员可以是任意类型,包括数组或集合。当一个类包含了数组或集合成员时,索引器将大大简化对数组或集合成员的存取操作。,20,6.2.1,索引器的定义与使用,定义索引器的方式与定义属性有些类似,其一般形式如下,修饰符,数据类型,this,索引类型,index,get,/,获得属性,set,/,设置属性,class Album /,定义一个相册类,Photo photos;/,该数组用于存放照片,public Photo thisint index/,带有,int,参数的,Photo,读,/,写索引器,get,if(index=photos.Length)return null;,return photosindex;/,对于有效索引,返回请求的照片,set,if(index=photos.Length)return;,photosindex=value;,21,6.2.1,索引器的定义与使用,2,索引器的使用,通过索引器可以存取类的实例的数组成员,操作方法与数组相似,一般形式如下:,对象名,索引,其中,索引的数据类型必须与索引器的索引类型相同。,【,实例,6-3】,利用前面定义的索引器进行照片的添加和查询,22,6.2.1,索引器的定义与使用,3,接口中的索引器,在接口中也可以声明索引器,接口索引器与类索引器的区别有两个:一是接口索引器不使用修饰符;二是接口索引器只包含访问器,get,或,set,,没有实现语句。访问器的用途是指示索引器是可读写、只读还是只写的,如果是可读写的,访问器,get,和,set,均不能省略;如果是只读的,省略,set,访问器;如果是只写的,省略,get,访问器。,例如:,public interface IAddress,string thisint index get;set;/,声明索引器,string Address get;set;/,声明属性,string Answer();/,声明方法,23,6.2.2,索引器与属性的比较,索引器与属性都是类的成员,语法上非常类似。索引器一般用在自定义的集合类中,通过使用索引器来操作集合对象就如同使用数组一样简单;而属性可用于任何自定义类,它增强了类的字段成员的灵活性。,24,6.3,泛型,6.3.1,泛型概述,6.3.2,泛型集合,6.3.3,泛型类、泛型方法和泛型接口,返回,25,26,1.,什么是泛型,泛型是通过“参数化类型”来实现在同一则代码中操作多种数据类型。,泛型类型是一种编程范式,它利用“参数化类型”将类抽象化,从而实现更为灵活的复用。,泛型赋予了代码更强的安全性、更好的复用、更高的效率和更清晰的约束,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,6.3.,泛型方法的例子,void Swap,(ref,T,t1,ref,T,t2),T,temp=t1;,t1=t2;t2=temp;,Int Max(ref,int,t1,ref,int,t2),int,temp=t1;,t1=t2;t2=temp;,int a=3,b=5;,Swap(ref a,ref b);,string,a=“12”,b=“xy”;,Swap(ref a,ref b);,int,a=3,b=5;,Swap(ref a,ref b);,27,28,2.,为什么要引入泛型,通常在讨论数组时都需要预设一个前提,即到底要解决的是整数、小数、还是字符串的运算问题。因此,在使用数组时需要首先确定数组的类型,然后再把相同类型的数据放入数组中。例如,把,100,个整数存入数组中,得到一个整型数组,而把,100,个自定义的,Student,对象存入数组中,得到一个对象型或,Student,型数组。,利用数组来管理数据,虽然直观、容易理解,但存在很大的局限性,仍然需要重复编写几乎完全相同的代码来完成排序和查找操作。为此,,C#,提供了一种更加抽象的数据类型,泛型,以克服数组的不足。当利用泛型来声明这样一个更抽象的数据类型之后,再也不需要针对诸如整数、小数、字符、字符串等数据重复编写几乎完全相同的代码。,具体思路如下:首先声明这种泛型数据类型,声明时不用指定要处理的数据的类型,只讨论抽象的数据操作,如排序、查找等。在实际引用这种泛型数据类型时,先确定要处理的数据类型,再执行相应的操作。因此,泛型是一种“泛泛而谈”的数据类型。,电子科大成都学院精品课程Visual C#.Net程序设计,2025/4/19 周六,6.3.3,泛型类、泛型方法和泛型接口,1,泛型类,当一个类的操作不针对特定或具体的数据类型时,可把这个类声明为泛型类。泛型类最常用于集合,如链接列表、哈希表、堆栈、队列和树等。一般情况下,创建泛型类的过程为:从一个现有的具体类开始,逐一将每个类型更改为类型参数,一直达到通用化和可用性的最佳平衡。,定义泛型类的一般形式如下:,访问修饰符,class,泛型类名,:,基类或接口,类型参数约束,/,类的成员,29,6.3.3,泛型类、泛型方法和泛型接口,其中,“访问修饰符”包括,public,、,protected,和,internal,等,“类型参数列表”不指定数据类型,当具有多个类型参数时使用逗号分隔。泛型类可以从基泛型类派生,也可以从泛型接口派生,当所声明的泛型类不是派生类时,省略基类和接口。“类型参数约束”用来限定泛型类所要处理的数据类型。,30,6.3.3,泛型类,在,C#,中,一共有,5,类约束,分别如下:,(1)where T:struct,:类型参数必须是值类型。,(2)where T:class,:类型参数必须是引用类型,包括任何类、接口、委托或数组类型,(3)where T:new(),:类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,,new(),约束必须最后指定。,(4)where T:,:类型参数必须是指定的基类或派生自指定的基类。,(5)where T:,:类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。,31,6.3.3,泛型类,【,实例,6-4】,泛型类的定义和使用演示。,32,6.3.3,泛型方法,2,泛型方法,泛型方法是在泛型类或泛型接口中使用类型参数声明的方法。其一般形式如下:,访问修饰符,返回值类型 方法名,(,形式参数列表,),/,语句,其中,类型参数列表与其所属的泛型类的类型参数列表相同。,33,6.3.,泛型方法,T,Max(,T,t1,T,t2),if(,t1t2,)return t1;,return t2;,int,Max(,int,t1,int,t2),if(,t1t2,)return t1;,return t2;,int a=3,b=5;,?Max(a,b);,string,a=“12”,b=“xy”;,?Max(a,b);,int,a=3,b=5;,?Max(a,b);,Comparable,(T,T)?,operator,34,6.3.3,泛型接口,C#,允许自定义泛型接口,一般形式如下:,访问修饰符,interface,接口名,/,接口成员,其中,访问修饰符可省略,“类型参数列表”表示尚未确定的数据类型,类似于方法中的形参列表,当具有多个类型参数时使用逗号分隔,泛型接口也可以使用类型约束。,public interface IComparable,int CompareTo(T t);,public interface IComparer,int Compare(T t1,T t2);,35,2025/4/19 周六,36,publicclassmyCompare:IcomparerintCompare(,T,t1,T,t2)/,不区分大小写的比较器,return(newCaseInsensitiveComparer().Compare(t1,t2);,T,Max(,T,t1,T,t2),T,max;,if(Compare(t1,t2)0)max=t1;,else max=t2;,return max;,36,2025/4/19 周六,37,Class Over,Thank you!,37,
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:C#程序设计经典教程PPT.ppt
    链接地址:https://www.zixin.com.cn/doc/10040833.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork