Thema: Delphi Eigenen Typ in Klasse

Einzelnen Beitrag anzeigen

Benutzerbild von zer00
zer00

Registriert seit: 7. Okt 2003
95 Beiträge
 
Delphi 2005 Professional
 
#13

Re: Eigenen Typ in Klasse

  Alt 22. Jul 2006, 10:20
Zitat von Elvis:
Wenn du < 20 Elemente hast, vielleicht. Aber wahrscheinlich nicht. Die Zeiten ändern sich, mit den flachen Adressräumen wurden linked Lists immer unbedeutender. Ein array-basierter Container wie die TList-Ableitungen wäre schon mehr als OK.
Du fährst aber definitiv besser wenn du deine Daten als Instanzen von Klassen abbildest. Records/Structs haben ihre Berechtigungen IMHO nur, wenn man mit einem Speicherbereich fixer Größe arbeiten muss, der in fest vorgechriebene Felder unterteilt wird. Zum Beispiel für API calls.
Eine Instanz einer Klasse kostet dich eigentlich nur ihren VMT-Pointer als Overhead, dafür gewinnst du neben Polymorphie noch einiges an Unterstützung des Compilers.
So ich habe versucht den Tip mit der Instanz der Klasse umzusetzen.
Ich hoffe ich habe das in etwa richtig gemacht.

Code Form1

Delphi-Quellcode:
implementation
uses Termin;
{$R *.dfm}

var Liste: TList;
    index: integer;

procedure TForm1.NewItem(name, nr: String);
begin
  Liste.Add(TTermin.Create(name,nr));
  Label2.Caption:= IntToStr(index);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Liste:= TList.Create;
  index:= 0;
end;



procedure TForm1.Button1Click(Sender: TObject);
var name, nr: string;
begin
  name:= Edit1.Text;
  nr:= Edit2.Text;
  NewItem(name,nr);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:= TTermin(Liste[index]).name;
  Edit2.Text:= TTermin(Liste[index]).nr;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  if(index < Liste.Count -1) then
    inc(index);
    Label2.Caption:= IntToStr(index);
    self.Button2.Click;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  if(index > 0) then
    dec(index);
    Label2.Caption:= IntToStr(index);
    Self.Button2.Click;
end;

Code der Klasse

Delphi-Quellcode:
unit Termin;

interface


type
  TTermin = class(TObject)
  private
    { Private-Deklarationen }
    FName: String;
    FNr: String;

  public
    { Public-Deklarationen }
    property Name: String read FName write FName;
    property nr: String read FNr write FNr;
    Constructor Create(Name, nr: String);
  end;

implementation

Constructor TTermin.Create(Name, nr: String);
begin
  inherited Create;
  FName:= Name;
  FNr:= nr;
end;

end.
Jetzt ist mir einfach nicht ganz klar wie ich die Instanzen wieder freigebe, reicht es wenn ich alle Objects in meiner Liste mit Free freigebe und anschliessend die Liste selbst mit Free freigebe?

grz zer00
sei kühn, sei immer kühn, sei nicht zu kühn
  Mit Zitat antworten Zitat