C#入门经典第十一章

原创 2012年03月31日 13:58:24

第11章   集合、比较和转换

11.1集合

强类型化的:使用时不需要把他们转换为正确的类型

System.Collections

IEnumerable:可以迭代集合中的项

ICollection:可以获取集合中项的个数

IList:提供了集合的列表项

IDictionary:提供了可通过键码值访问的项列表。

11.1.2定义集合

public class Animals:CollectionBase

{

Public void Add(Animal newAnimal)

{

List.Add(newAnimal);

}

 

}

11.1.3索引符

public class Animals:CollectionBase

{

Public Animal this[]

{

Get

{

Return (Animal)List[animalIndex];

}

Set

{

List[animalIndex]=Value;

}

}

 

}

11.1.5关键字值集合和IDictionary

public class Animals:DictionaryBase

{

Public void Add(string newID,AnimalnewAnimal)

{

Dictionary.Add(newID,newAnimal);

}

Public void Remove(string newID,Animal newAnimal)

{

Dictionary.Remove(newAnimal);

}

 

Public Animal this[string animalID]

{

Get

{

Return (Animal)Dictionary[animalID];

}

Set

{

Dictionary[animalID]=value;

}

}

}

Foreach(DictionaryEntry myEntry inanimalCollection)

{

Console.WriteLine(“”,myEntry.Value.ToString(),((Animal)myEntry.Value).Name);

}

 

11.1.6迭代器(IEnumerable)

Foreach循环

(1)   调用collectionObject.GetEnumerator(),返回一个IEnumerator引用,这个方法可以通过IEnumerable接口的实现代码来获得,但这是可选的。

(2)   调用所返回的IEnumerator接口的MoveNext()方法

(3)   如果MoveNext()方法返回true,就是用IEnumerator接口的Current属性获取对象的一个引用,用于foreach循环。

(4)   重复前面两步,直到MoveNext()方法返回false为止,此时循环停止。

迭代器返回的类型可能是IEnumerable和IEnumerator

(1)   如果要迭代一个类,可使用GetEnumerator(),返回类型是IEnumerator

(2)   如果要迭代一个类成员,例如一个方法,使用IEnumerable。

在迭代器中,使用yield关键字选择要在foreach循环中使用的值

Yield return value; yield break; 退出foreach

11.1.7深度复制

ICloneable

Public object Clone()

11.2比较

11.2.1类型比较

     1.封箱和拆箱

     封箱(boxing)是把值类型转换为System.Object类型,或者转换为由值类型实现的接口类型。

     拆箱(unboxing)是相反的转换过程

     ObjectrefType=valType1;

     它允许使用集合中的值类型,集合中项的类型是object。其次,允许在值类型上调用object。

2.  is运算符

<operand>is <type>

11.2.2值比较

可以使用运算符重载,或者使用IComparable和IComparer接口

1.  运算符重载(operatoroverloading)

Public static AddClass1 operator +(AddClass1 op1,AddClass1op2)

{}

2.  IComparable和IComparer接口

IComparable:在要比较的对象的类中实现,可以比较该对象和另一个对象 CompareTo

IComparer在一个单独的类中实现,可以比较任意两个对象 Compare

11.3转换

public static implicit(explicit)operator ConvClass2(ConvClass1 op1)

as

C++Primer第五版 第十一章习题答案(1~10)

1:知识点1:关联容器与顺序容器有着根本的不同 知识点2:关联容器的元素是按关键词来保存和访问的,顺序容器是按他们在容器中的位置来顺序访问 知识点3:关键词在关联容器中起到重要的作用,map中的元素是...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月01日 09:31
  • 1810

java语言程序设计基础篇第十一章编程练习题

1package yongheng; import java.util.Scanner;public class Main { public static void main(String a...
  • gyhguoge01234
  • gyhguoge01234
  • 2016年09月08日 22:19
  • 2225

算法导论第十一章----11.2.1-11.2.5

11.2-1& 随机变量Xij表示i,j哈希值相同 11.2-3 search(successful or unsuccessful): Θ(1+α/2) insert: Θ(1+...
  • lihenair
  • lihenair
  • 2014年02月27日 20:05
  • 4726

C++ Primer Plus第六版 第十一章 编程练习答案

//第一题 //windows下\r\n在txt中是换行...被坑了= = //vector.h #ifndef VECTOR_H_ #define VECTOR_H_ #include name...
  • zhaoshu01234
  • zhaoshu01234
  • 2015年09月26日 10:54
  • 1761

《C++ Primer Plus(第六版)》(20)(第十一章 使用类 编程题答案1)

这章主要讲重载运算符,友元函数和类型转换。 1. 第一题就困了我好久,怎么都访问不了私有成员,一开始以为是哪里写错了,对着书敲代码都不行。 后来又觉得会不会友元的重载运算符太复杂,就自己写个简单的友元...
  • u012175089
  • u012175089
  • 2016年12月22日 10:12
  • 2329

第十一章上机练习

--查询每个年级的总学时数,并按照升序排列。 SELECT GradeId AS 年级,sum(ClassHour) as 总学时数 FROM [MySchool].[dbo].[Subject] g...
  • qq_36074180
  • qq_36074180
  • 2016年11月25日 17:23
  • 103

入门有余, 经典不足 — 小评《C#入门经典》

鉴于C#程序设计语言这本Anders写的书就像是语言规格说明, 我推荐大家阅读C#入门经典(Beginning Visual C# 2010)入门. 说实话, 看到这本书的时候, 我稍微叹了口...
  • vagrxie
  • vagrxie
  • 2013年01月11日 07:21
  • 16366

《C#入门经典(第7版)》编写C#程序

两种基本的应用程序类型:控制台应用程序和桌面应用程序 1、开发环境:     Visual Studio      C#6      .NET Framework 4.6     register ...
  • u010590746
  • u010590746
  • 2017年05月21日 15:23
  • 1922

C++primer第五版第十一章学习笔记

练习11.1:描述map和vector的不同。 vector这种顺序容器,元素在其中按顺序存储,每个元素都有唯一对应的位置编号,所有操作都是按编号进行的。例如,获取元素,插入删除元素,遍历元素。底层的...
  • sunhero2010
  • sunhero2010
  • 2015年11月14日 09:32
  • 1268

思科CCNA第一学期第十一章答案

1   路由器完成启动步骤后,网络管理员希望立即检查路由器配置。管理员从特权执行模式可以使用以下哪些命令达到此目的?(选择两项) show flash show N...
  • u014253173
  • u014253173
  • 2015年01月03日 15:42
  • 4017
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#入门经典第十一章
举报原因:
原因补充:

(最多只允许输入30个字)