Einzelnen Beitrag anzeigen

OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

TObjectList<T> und Comparer

  Alt 27. Jan 2015, 11:39
Delphi-Version: XE4
Hi Freunde,

nun ist es soweit, es gibt kein Entrinnen mehr. Ich muß mich endgültig mit Interfaces auseinandersetzen. Kam ja bisher immer drumherum... Mein Problem und Ziel ist es, eine sortierte generische TObjectList zu bekommen. Folgende, stark gekürzte Klasse:

Delphi-Quellcode:
    TPosition = class(TObject)
    public
      TimeStamp: TDateTime;
    end;
soll in eine TObjectList<TPosition> hinein und die Liste nach TPosition.TimeStamp sortiert werden. Dazu gibt es ja TObjectList<T>.Sort(IComparer<T>). Also habe ich eine Klasse gebastelt, die IComparer implementiert:
Delphi-Quellcode:
    TPositionComparer = class(TInterfacedObject, IComparer<TPosition>)
       function Compare(const Left, Right: TPosition): integer;
    end;

function TPositionComparer.Compare(const Left, Right: TPosition): integer;
var
   RDT, LDT: TDateTime;
begin
     RDT:=Right.Timestamp;
     LDT:=Left.Timestamp;
     if LDT < RDT then
        exit(-1);
     if LDT=RDT then
        exit(0)
     else
        exit(1);
end;
Schön ausführlich, damit wir auch schön debuggen können und so.

Im Einsatz sieht das ganze dann so aus:

Delphi-Quellcode:
var
   TCo: TPositionComparer;
begin
     //Result ist ein TPosition und wird hier zusammengebaut
     //FPositions ist eine TObjectList<TPosition>
     FPositions.Add(Result);
     TCo:=TClientComparer.Create;
     FPositions.Sort(TCo);
Compiliert klaglos. Funktioniert klaglos.

Fragen: Abgesehen davon, das ich auch eine anonyme Methode hätte verwenden können: Ist das überhaupt so richtig aufgebaut ? Außerdem höre ich immer wieder, das man Interfaces nicht wieder freigeben muß. Trifft das auch auf mein TCo, das ich immer wieder neu erzeuge, zu ? Wenn nein, wie muß das dann gemacht werden ?

Danke für die Hilfe !
  Mit Zitat antworten Zitat