![]() |
AW: Wie verwendet man "Unterklassen" am besten?
Hallo Hansa,
die Records musst Du doch auch erstellen. Bis bald Chemiker |
AW: Wie verwendet man "Unterklassen" am besten?
Inwiefern muss ich die wo erstellen ? :shock: Oder gibts jetzt sogar so was wie Rec1.Create () ? Ich sage doch auch nicht Int1.Create oder Real2.Free.
|
AW: Wie verwendet man "Unterklassen" am besten?
Delphi-Quellcode:
Natürlich nur bei Zeigern nötig :wink:
var
rec: ^Recordtyp; begin New(rec); ... rec^.Feld := ...; // evtl. geht auch: (zumindest beim FPC) rec.Feld := ...; ... Dispose(rec); end; |
AW: Wie verwendet man "Unterklassen" am besten?
Zitat:
Und warum habe ich das mit Klassen gemacht? Ich frage mich nämlich wie du neue Einträge in die ObjectList bekommen willst:
Delphi-Quellcode:
Das heißt irgendwo muss du Datei reinitialisieren. Das macht man i.d.R. mithilfe von new oder einer Methode (also wie bei bei der Methode Rect()). Ersteres hat den Nachteil: TObjectList wird das Objekt vermutlich nicht freigeben (korrigiert mich, wenn das nicht stimmt). Bei zweiteren, hast du ja ausgeführt, dass das ja eigentlich eine Methode der Datei ist, dann kann man das auch gleich zum Objekt machen.
var
datei : TArtGrundDaten; list : TObjectList; list := TObjectList.Create(); datei.name := 'foobar'; list.add(datei); datei.name := 'Hallo Welt'; list.add(datei); UND inzwischen geht ja auch das:
Delphi-Quellcode:
Und dann hatte ich auch erwähnt, dass man TFile von TMetaData erben lassen kann. Das geht bei records nicht.
type
TFoo = record x : integer; function getXsqr() : Integer; end;
Delphi-Quellcode:
MfG
type
TMetaData = class; TFile = class(TMetaData) Data : TStream; end; Fabian |
AW: Wie verwendet man "Unterklassen" am besten?
Um das Typecasting komplett zu vermeiden, kann man generische Listen verwenden, aber die gibt es bei Delphi 7 nicht.
Ich benutze sowohl Records als auch Klassen. Die Entscheidung welches Konstrukt ich verwende, hängt vom Anwendungsfall ab. Dabei berücksichtige ich die Vorteile die die Strukturen jeweils bieten: Vorteile Records:
Zurück zur Ausgangsfrage: Um das Typcasting einzuschränken, würde ich bei TMyFile die Get-Funktion ändern. Etwa so:
Delphi-Quellcode:
Das Typecasting ist dann nur einmal in "Get" bzw. "Put" notwendig. Der Zugriff sieht dann so aus:type TMyFiles = class private FList: TList; public property Items[Index: Integer]: pFileRec read Get write Put; default; end;
Delphi-Quellcode:
Der Klasse TMyFiles ist es jetzt egal, ob sie "Besitzer" der Records ist, oder ob sie nur Verweise auf die Records verwaltet. Beim Freigeben muss man natürlich unterscheiden, ober man nur die Verweise freigeben will, oder auch die Records. Das kann man dann so machen, wie TObjectlist (ein Boolean zeigt an, was freigeben werden soll) oder man kümmert sich in jedem Einzelfall selbst darum.
var
allFileList: TMyFiles; ... if allFileList[i].ext='PAS' then N.B. Die Add Funktion muss natürlich auch noch entsprechend geändert werden (statt TFileRec nun pFileRec), oder man erfindet eine neue Funktion AdRef(file: pFileRec) oder wie auch immer... |
AW: Wie verwendet man "Unterklassen" am besten?
Wieso verwendet man nicht:
Delphi-Quellcode:
Typensicher, kein TypeCasting, kein Create, kein Free.
MyFileList : Array Of TFileinfoRecord;
|
AW: Wie verwendet man "Unterklassen" am besten?
Aber gerade das befüllen ist ziemlich langsam.
MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 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 by Thomas Breitkreuz