AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Class und Record

Ein Thema von mfs · begonnen am 1. Jun 2006 · letzter Beitrag vom 1. Jun 2006
 
Dax
(Gast)

n/a Beiträge
 
#7

Re: Class und Record

  Alt 1. Jun 2006, 21:21
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.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz