对IComparable,IComparer,IEnumerable,IEnumerator的理解

来源:互联网 发布:mac 分区一半没了 编辑:程序博客网 时间:2024/05/04 17:07
IComparable接口要实现CompareTo方法,并且一定要通过值可以排序的类型来实现,例如基本数值类型(整型等),或者字符串,看下面的代码可能易懂一点:
public class Temperature : IComparable
{
protected double temperatureF;

public int CompareTo(object obj) {
if(obj is Temperature)
{
Temperature otherTemperature = (Temperature) obj;
return this.temperatureF.CompareTo(otherTemperature.temperatureF);
}
else
{
throw new ArgumentException("object is not a Temperature");
}
}
}
IComparer接口其实是特定用于Array的Sort和BinarySearch方法以及为SortList提供自定义的排序规则,通过实现IComparer接口的Compare方法以确定Sort如何进行对对象进行排序。
而IComparable中的CompareTo 方法提供了一个默认的排序规则。SorList 只是将Key作为排序对象进行排序。
另外IList<T> 没有排序方法 倒是可以用它存放继承了 IComparable 接口的对象(只支持默认的CompareTo()排序方法)

实现IEnumerable 的类表示其支持迭代其内部对象,也就是在.net中foreach循环,IEnumerable接口只有一个方法GetEnumerator(),其返回一个实现IEnumerator接口的类对象,
IEnumerator有两个方法MoveNext()、Reset()和一个属性Current用于迭代IEnumerator对象中对象集合。
其实把IComparable和Icomparer,IEnumerable和IEnumerator分开为两个接口来定义,是遵从面向对象的思维定向,表示IComparable对象可以比较,IEnumerable对象可以迭代,Icomparer,负责对对象进行比较,IEnumerator负责对对象进行迭代,各司其职罢了。
IEnumerable表明对象是不确定类型的集合并支持简单迭代,是不是定长根本不关心...

IEnumerable<T>表明对象是指定类型的集合并支持简单迭代,是不是定长根本不关心...

ICollection是IEnumerable接口的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,这里的大小是指可以是定长的也可以是不定长的...

IList是ICollection和IEnumerable的派生接口,表明对象是不确定类型的集合并支持简单迭代,而且定义了集合的大小、枚举数和同步方法,还可以按照索引单独访问,这里的大小是指可以是定长的也可以是不定长的...

ArrayList类是IList接口的实现,表明对象是不确定类型的大小可按需动态增加的数组...

List<T>类是IList<T>接口的实现,是ArrayList类的泛型等效类并增强了功能,表明对象是可通过索引访问的对象的强类型列表...在.NET 2.0以上可以完全代替ArrayList,就是说ArrayList已经被淘汰...

而动态数组和链表在本质上是不同的...在.NET 2.0以上有双向链表LinkedList<T>泛型类,它也是继承自ICollection<T>,IEnumerable<T>,ICollection,IEnumerable...