Moin,
ich hab kein Problem - ich möchte nur wissen, wo der Vorteil liegt.
Bei der alten Klasse TList kann ich dafür sorgen, dass Sie nach meinen Kriterien sortiert wird, indem ich eine eigene Function implementiere, die die Werte vergleicht. Diese Function übergebe ich an TList.SortList(const Compare: TListSortCompareFunc). Fertig ist der Lack.
Nun wollte ich das selbe bei einer TList<T> machen. Dort funktioniert es etwas anders. Ich muss für den Vergleich eine Klasse erstellen, die IComparer implementiert (bzw. halt von TComparer<T> ableiten). Dort überschreibe ich die Function Compare.
Um nun die Liste zu sortieren, muss ich eine Instanz vom Comparer erzeugen und an TList<T>.Sort übergeben.
Warum hat Embarcadero das gemacht? Die alte Methode ist aus meiner Sicht doch viel einfacher.
alt:
1. Function erstellen.
2. Referenz auf die Function übergeben
das war es.
neu:
1. Klasse ableiten
2. Function überschreiben
3. Instanz des Comparer erstellen
4. Instanz an TList<T>.Sort übergeben
5. Instanz vom Comparer wieder freigeben.
Deutlich mehr Quellcode, mehr Aufwand, keinen offensichtlichen Vorteil.
Warum hat man es dann so gemacht?
Danke!