1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Generics.Defaults, Generics.Collections;
type
TMyComparer = class;
TMyLevel1 = class
public
Property1: string;
end;
TMyLevel1List = class(TObjectList<TMyLevel1>);
TMyLevel2 = class(TMyLevel1)
public
Property2: Integer;
end;
TMyLevel2List = class(TMyLevel1List)
public
procedure Sort; reintroduce;
end;
TMyComparer = class(TComparer<TMyLevel2>)
function Compare(const ALevelLeft, ALevelRight: TMyLevel2): Integer; override;
end;
TForm1 = class(TForm)
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyLevel2List }
procedure TMyLevel2List.Sort;
var
Comparer: TMyComparer;
begin
Comparer := TMyComparer.Create;
try
inherited Sort(Comparer);
finally
Comparer.Free;
end;
end;
{ TMyComparer }
function TMyComparer.Compare(const ALevelLeft, ALevelRight: TMyLevel2): Integer;
begin
if ALevelLeft.Property2 < ALevelRight.Property2 then
Result := -1
else if ALevelLeft.Property2 > ALevelRight.Property2 then
Result := 1
else
Result := 0;
end;
end. |
Partager