C#入门经典第十一章

第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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值