Zitat von
himitsu:
@DeddyH: wenn er :=ReadBla nutzt, dann wird dieser Code vermutlich direkt in der Klasse ( :=Self.ReadBla ) rumliegen ... also kein Problem
Wenn das so wäre, dann könnte man sich das Gezuchtel mit New und Dispose sparen, und doch nur den 4-Byte-Funktionszeiger (TMethod.Code) verwenden:
Delphi-Quellcode:
TMyClass = class
strict private
FStringList: TStringList;
function ReadBla(AItem, BItem: TObject): Boolean;
procedure Rein(const AName: string; const AReadMethod: TReadMethod);
function Raus(AIndex: Integer; AItem, BItem: TObject): Boolean;
public
constructor Create;
procedure Test;
end;
constructor TMyClass.Create;
begin
inherited Create;
FStringList := TStringList.Create;
end;
procedure TMyClass.Test;
begin
Rein('Bla', ReadBla);
if not Raus(0, nil, nil) then
Beep;
end;
procedure TMyClass.Rein(const AName: string; const AReadMethod: TReadMethod);
var
AMethod: TMethod;
begin
TReadMethod(AMethod) := AReadMethod;
FStringList.AddObject(AName, AMethod.Code);
end;
function TMyClass.Raus(AIndex: Integer; AItem, BItem: TObject): Boolean;
var
AMethod: TMethod;
begin
AMethod.Data := Self;
AMethod.Code := FStringList.Objects[AIndex];
Result := TReadMethod(AMethod)(AItem, BItem);
end;