《C#入门经典》学习笔记.docx
《《C#入门经典》学习笔记.docx》由会员分享,可在线阅读,更多相关《《C#入门经典》学习笔记.docx(18页珍藏版)》请在三一办公上搜索。
1、C#入门经典学习笔记C#入门经典学习笔记 集合 C#中的数组是作为System.Array类的实例来执行的,它们是集合类中的一种 集合类一般用于处理对象列表,其功能是通过执行System.Collection中的接口实现的 集合的功能可以通过接口来实现 该接口可以使用基本基本集合类,也可以创建自定义的集合类 System.Collections 命名空间有很多接口提供了基本的集合功能: IEnumerable:公开枚举数,该枚举数支持在非泛型集合上进行简单迭代 ICollection:定义所有非泛型集合的大小、枚举数和同步方法 IList:表示可按照索引单独访问的对象的非泛型集合 IDicti
2、onary:表示键/值对的非通用集合 System.Array类继承了IList,ICollection和IEnumerable 但不支持IList的一些高级功能,而且是一个大小固定的项目列表 使用集合 Systems.Collections中的一个类System.Collections.ArrayList,也执行IList,ICollection和IEnumerable接口,但与数组不同,它是大小可变的 使用System.Array类的集合,必须用固定的大小来初始化数组 例如: Animal animalArray = new Animal2; 使用System.ArrayList类的集合,
3、不需要初始化其大小 例如: ArrayList animalArrayList = new ArrayList; 这个类还有两个构造函数: 1 把现有集合作为参数复制到新实例中 2 用一个int参数设置集合的容量,不过实际内容超过容量时会自动增加 初始化数组,需要给这个项目赋予初始化了的对象 例如: Cow myCow1 = new Cow(Deirdre); animalArray0 = myCow1; animalArray1 = new Chicken(Ken); 可以用这两种方式初始化数组 对于ArrayList集合,需要用Add方法添加新项目 例如: Cow myCow2 = new
4、 Cow(Hayley); animalArrayList.Add(myCow2); 1 / 16 animalArrayList.Add(new Chicken(Roy); 在添加万项目之后,就可以用与数组相同的语法重写他们 例如: animalArrayList1 = new Chicken(Roy2) Array数组和ArrayList集合都支持foreach结构来迭代 例如: foreach (Animal myAnimal in animalArray) foreach (Animal myAnimal in animalArrayList) Array数组使用Length属性获取项
5、目的个数 例如: int animalCount = animalArray.Length; ArrayList集合使用Count属性获取项目的个数 int animalCount2 = animalArrayList.Count; Array数组是强类型化的,可以直接使用数组的类型来存储项目 即可以直接访问项目的属性和方法 例如: 对于类型是Animal的数组,Feed是类Animal的方法 animalArray0.Feed; 但对于类Animal派生类的方法,就不能直接调用,需要强制转换 (Chicken)animalArray1).LayEgg; ArrayList集合是System.
6、Object对象的集合,通过多态性赋給Animal对象 必须进行数据类型转换 例如: (Animal)animalArrayList0).Feed; (Chicken)animalArrayList1).LayEgg; 使用Remove和RemoveAt方法删除项目 Remove 从 ArrayList 中移除特定对象的第一个匹配项 RemoveAt 移除 ArrayList 的指定索引处的元素 删除项目后,会使其他项目在数组中移动一个位置 使用AddRange和InsertRange方法可以一次添加多个项目 AddRange 将 ICollection 的元素添加到 ArrayList 的末
7、尾 InsertRange 将集合中的某个元素插入 ArrayList 的指定索引处。 例如: animalArrayList.AddRange(animalArray); 2 / 16 使用IndexOf方法获取指定项目的索引值 IndexOf 返回 ArrayList 或它的一部分中某个值的第一个匹配项的从零开始的索引。 可以通过索引值直接访问选项 例如: int iIndex = animalArrayList.IndexOf(myCow1); (Animal)animalArrayListiIndex).Feed; 定义集合 可以从一个类派生自定义的集合 推荐使用System.Coll
8、ections.CollectionBase类 CollectionBase类有接口IEnumerable,ICollection,和IList List属性可以通过Ilist接口访问项目,InnerList属性用于存储项目的ArrayList对象 例如: public class Animals : CollectionBase public void Add(Animal newAnimal) List.Add(newAnimal); public void Remove(Animal oldAnimal) List.Remove(oldAnimal); public Animals 这个
9、类用于生成Animal类型的集合,可以用foreach访问其成员: Animals animalCollection = new Animals; animalCollection.Add(new Cow(Sarah); foreach (Animal myAnimal in animalCollection) 如果要以索引的方式访问项目,就需要使用索引符 索引符 索引符是一种特殊类型的属性,可以把它添加到类中,提供类似数组的访问 最常见的一个用法是对项目执行一个数字索引 例如: 在Animals集合中添加一个索引符 3 / 16 public class Animals : Collecti
10、onBase . public Animal thisint animalIndex get return (Animal)ListanimalIndex; set ListanimalIndex = value; this关键字与方括号一起,方括号中是索引参数 对List使用一个索引符,而且显示声明了类型,因为IList接口返回的是System.Object对象 现在可以用索引的方式访问项目: animalCollection0.Feed; 关键字值集合和IDictionary 集合还可以执行类似的IDictionary接口,通过关键字值进行索引 使用基类DictionaryBase,它也执
11、行IEnumerable和ICollection接口,提供了对任何集合都相同的集合处理功能 例如: public class Animals : DictionaryBase public void Add(string newID, Animal newAnimal) Dictionary.Add(newID, newAnimal); public void Remove(string animalID) Dictionary.Remove(animalID); public Animals public Animal thisstring animalID get return (Anim
12、al)DictionaryanimalID; 4 / 16 set DictionaryanimalID = value; 这样添加了Add方法,Remove方法和一个通过关键字访问项目的方法 其中Dictionary是包含在DictionaryBase实例中的元素的列表 DictionaryBase集合和CollectionBase集合在foreach的工作方式不同, DictionaryBase提供的是DictionaryEntry结构,需要通过Value成员获取对象本身 例如: CollectionBase集合: foreach (Animal myAnimal in animalCol
13、lection) myAnimal.Feed; DictionaryBase集合: foreach (DictionaryEntry myEntry in animalCollection) (Animal)myEntry.Value).Feed; 迭代器 通过IEnumerable接口,可以使用foreach循环获取对象 foreach循环,迭代collectionObject的过程: 1 调用Collection的GetEnumerator方法返回一个IEnumerator引用 该方法也可以通过IEnumerable接口的实现代码获得 2 调用IEnumerator接口的MoveNext方
14、法,将枚举数推进到集合的下一个元素 3 如果MoveNext方法返回true,使用IEnumerator接口的Current属性获取对象的引用,用于foreach循环 4 重复前两个步骤,直至MoveNext返回false时,循环停止 迭代器是一个按顺序提供要在foreach循环中使用的所有值的代码块 一般这个代码块是一个方法,也可以使用属性访问器和其他代码块作为迭代器 代码块的返回值可能是IEnumerable或IEnumerator接口类型: 1 如果要迭代一个类,可使用方法IEnumerator,其返回类型是IEnumerator 2 如果要迭代一个类成员,则使用IEnumerable
15、在迭代器块中,使用yield关键字选择要在foreach循环中使用的值 语法: yield return value; 例如: public static IEnumerable SimpleList yield return string 1; yield return string 2; 5 / 16 yield return string 3; public static void Main(string args) foreach (string item in SimpleList) Console.WriteLine(item); Console.ReadKey; 这里Simple
16、List就是迭代器块,是一个方法,使用IEnumerable返回类型 可以从yield语句中返回任意类型 可以中断信息返回foreach循环过程 语法:yield break; 迭代器和集合 迭代器可以用于迭代储存在目录类型的集合中的对象 例如: public new IEnumerator GetEnumerator foreach (object animal in Dictionary.Values) yield return (Animal)animal; 迭代集合中的对象: foreach (Animal myAnimal in animalCollection) 深度复制 使用Sy
17、stem.Object.MemberwiseClone方法可以进行阴影复制 对于值类型成员,没什么问题 但对于引用类型成员,新对象和源对象的成员将指向同一个引用对象 例如: public class Content public int Val; public class Cloner public Content MyContent = new Content; public Cloner(int newVal) MyContent.Val = newVal; 6 / 16 public object GetCopy return MemberwiseClone; 执行: Cloner my
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C#入门经典 C# 入门 经典 学习 笔记
链接地址:https://www.31ppt.com/p-3170993.html