关闭

C#入门经典第十一章

495人阅读 评论(0) 收藏 举报

第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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:25738次
    • 积分:479
    • 等级:
    • 排名:千里之外
    • 原创:24篇
    • 转载:2篇
    • 译文:0篇
    • 评论:2条