Wenn du von TList ableitest, damit deine Liste Records statt Pointern nimmt, tust du das:
Delphi-Quellcode:
TRecordList = class(TList)
private
function getRec(Index: Integer): Attribute;
procedure SetRec(Index: Integer; const Value: Attribute);
public
property Items[Index: Integer]: Attribute read getRec write SetRec; default;
function Add(const Item: Attribute): Integer;
function Extract(const Item: Attribute): Attribute;
function First: Attribute;
function IndexOf(const Item: Attribute): Integer;
procedure Insert(Index: Integer; const Item: Attribute);
function Last: Attribute;
function Remove(const Item: Attribute): Integer;
end;
{ TRecordList }
function TRecordList.Extract(const Item: Attribute): Attribute;
begin
Result := Attribute(inherited Extract(@Item));
end;
function TRecordList.Add(const Item: Attribute): Integer;
begin
Result := inherited Add(@Item);
end;
function TRecordList.First: Attribute;
begin
Result := Attribute(inherited First^);
end;
function TRecordList.getRec(Index: Integer): Attribute;
begin
Result := Attribute(inherited Get(Index)^);
end;
function TRecordList.IndexOf(const Item: Attribute): Integer;
begin
Result := inherited IndexOf(@Item);
end;
function TRecordList.Last: Attribute;
begin
Result := Attribute(inherited Last^);
end;
function TRecordList.Remove(const Item: Attribute): Integer;
begin
Result := inherited Remove(@Item);
end;
procedure TRecordList.Insert(Index: Integer; const Item: Attribute);
begin
inherited Insert(Index, @Item);
end;
procedure TRecordList.SetRec(Index: Integer; const Value: Attribute);
begin
inherited Put(Index, @Value);
end;
Ich denke du siehst, das alle Methoden der Klasse nun einen anderen Typen als Parameter haben (nämlich Attribute anstatt von Pointer), was dich die Klasse für deine Records benutzen lässt. Du kannst es also völlig transparent benutzen
Das
inherited bedeutet, das dort nicht nochmal die selbe Methode aufgerufen wird, sondern die der Basisklasse (also TList). Weil TList aber unbedingt Pointer haben will, müssen wir noch ein wenig friemeln mit den @'s und ^'s.