Code: Alles auswählen
unit Unit1;
{$mode objfpc}{$H+}
{$modeswitch advancedrecords}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, FGL;
Type
{ TSomeGeneric }
generic TSomeGeneric<T> = class
private
FCache: specialize TFPGList<T>;
public
procedure add(Const ARec:T);
constructor create;
destructor destroy;
end;
Type
TRecOne = Record
CreatedAt,ModifiedAt: TDateTime;
Content:ShortString;
class operator=(R1,R2:TRecOne):boolean;
end;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
FTestList: specialize TSomeGeneric<TRecOne>;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TRecOne }
class operator TrecOne.=(R1,R2:TRecOne):boolean;
begin
result := (R1.Content = R2.Content) and (R1.ModifiedAt = R2.ModifiedAt);
end;
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
R:TRecOne;
begin
R.CreatedAt := Now();
R.ModifiedAt := 0;
R.Content := 'Record created: ' + DateTimeToStr(R.CreatedAt);
FTestList.Add(R);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FTestList := specialize TSomeGeneric<TRecOne>.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FTestList);
end;
{ SomeGeneric }
procedure TSomeGeneric.add(const ARec: T);
begin
FCache.Add(ARec);
end;
constructor TSomeGeneric.create;
begin
// FCache := specialize TFPGList<T>.Create;
end;
destructor TSomeGeneric.destroy;
begin
FreeAndNil(FCache);
end;
end.
Thx, Armin.