AGB  ·  Datenschutz  ·  Impressum  







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

Wie verwendet man "Unterklassen" am besten?

Ein Thema von p80286 · begonnen am 1. Okt 2010 · letzter Beitrag vom 2. Okt 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 1. Okt 2010, 21:39
Hallo Hansa,

die Records musst Du doch auch erstellen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 1. Okt 2010, 22:14
Inwiefern muss ich die wo erstellen ? Oder gibts jetzt sogar so was wie Rec1.Create () ? Ich sage doch auch nicht Int1.Create oder Real2.Free.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#13

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 1. Okt 2010, 22:27
Delphi-Quellcode:
var
  rec: ^Recordtyp;
begin
  New(rec);
  ...
  rec^.Feld := ...;
  // evtl. geht auch: (zumindest beim FPC)
  rec.Feld := ...;
  ...
  Dispose(rec);
end;
Natürlich nur bei Zeigern nötig
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#14

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 1. Okt 2010, 22:56
Moin,
Aber nur dann auf true stelle, wenn danach die Elemente noch bestehen sollen.
Nein, nein, dann muss es auf false stehen. OwnsObjects = true heisst : Beim Freigeben der Liste wird alles enthaltene aufgeräumt/entfernt. Du schreibst das ja selber im nächsten Satz. [...]
Öhr ja mist ... du hast recht da fehlt irgendwo eine Verneinung.

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:
var
  datei : TArtGrundDaten;
  list : TObjectList;

list := TObjectList.Create();
datei.name := 'foobar';
list.add(datei);
datei.name := 'Hallo Welt';
list.add(datei);
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.

UND inzwischen geht ja auch das:
Delphi-Quellcode:
type
  TFoo = record
    x : integer;
    function getXsqr() : Integer;
  end;
Und dann hatte ich auch erwähnt, dass man TFile von TMetaData erben lassen kann. Das geht bei records nicht.
Delphi-Quellcode:
type
  TMetaData = class;
  TFile = class(TMetaData)
    Data : TStream;
  end;
MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler

Geändert von xZise ( 1. Okt 2010 um 22:59 Uhr)
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#15

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 2. Okt 2010, 09:45
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:
  • 4 Byte weniger Speicherbedarf pro Instanz
  • Einzelne Instanzen können auf dem Stack angelegt werden (schneller)
  • Automatisch angelegte Instanzen werden auch automatisch freigegeben
Vorteile Klassen:
  • Vererbung möglich
  • Typeinformation zur Laufzeit vorhanden
Wenn ich also sehr viele Instanzen anlegen möchte (Hausnummer: mehr als 10000) und keine Vererbung benötige, dann benutze ich gerne auch Records. Um eine Liste von Records zu verwalten, verwende ich meist ein offenes Array, weil ich mich dann nicht um die Freigabe zu kümmern brauche. Dafür habe ich einen höheren Aufwand beim Hinzufügen der Instanzen. Aber man kann natürlich auch TList benutzen.
Zurück zur Ausgangsfrage: Um das Typcasting einzuschränken, würde ich bei TMyFile die Get-Funktion ändern. Etwa so:
Delphi-Quellcode:
   
type TMyFiles = class
  private
    FList: TList;
  public
  property Items[Index: Integer]: pFileRec read Get write Put; default;
end;
Das Typecasting ist dann nur einmal in "Get" bzw. "Put" notwendig. Der Zugriff sieht dann so aus:

Delphi-Quellcode:
var
  allFileList: TMyFiles;
...
if allFileList[i].ext='PASthen
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.
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...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#16

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 2. Okt 2010, 12:00
Wieso verwendet man nicht:
MyFileList : Array Of TFileinfoRecord; Typensicher, kein TypeCasting, kein Create, kein Free.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#17

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 2. Okt 2010, 14:52
Aber gerade das befüllen ist ziemlich langsam.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 19:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz