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 !