(译自Delphi2009 Handbook)
TList的Sort方法:
procedure Sort; overload;
procedure Sort(const AComparer: IComparer<T>); overload;
其中的IComparer<T>接口是在Generics.Defaults单元定义的。如果你调用第一个版本默认的方法,它由TList<T>使用默认构造器初始化的,针对我们的情况它是没有用的。
我们所需要做的,不是定义一个一般的IComparer<T>接口的实现。出于类型的兼容,我们需要定义一个专用于TDate类的实现。并且有多种方法可以实现这个目的。其中之一含匿名方法。一个很奇妙的技术--TComparer,属于Gerneric.Default 单元,高级“结构化”的类,是个抽象类,并且通过泛型接口的实现,代码如下:
(第一种方法:派生出专用的比较器)
我们需要实例化这个泛型类,用于在本例中指定的TDate类型数据,通过继承一个具体的类,在其中实现用于特定类型的Compare方法。两个操作可以在一个步骤完成,使用下面的代码方法,需要一点时间去体会:
如果你觉得上面的代码看着很“不寻常”,很多人也会这么认为。新的类从一个特定泛型类的实例继承,你可以把它分为两个步骤来表达:(这一段有点疑惑的地方 ,所以把原文附上:)
If you think this code looks very unusual, you're not alone. The new class inherits from a specific instance of the generic class, something you could express in two separate steps as: (TComparer<TDate>是泛型形式的抽象类,为什么说特定的实例呢??)
你可以在完整的代码找奥Compare方法的实现,在这里并不是要强调的关键。记住,虽然你可以用IndexOf方法排序列表,但这里不可用(不像TStringList)。