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
Hansa

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

AW: Wie verwendet man "Unterklassen" am besten?

  Alt 1. Okt 2010, 21:25
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.

Übrigens wenn ich das richtig verstehe würde ich das so in der Art machen:
[delphi]TMetaData = class(TObject)
Name : string;
[...]
end;
Ne, so ist das nicht richtig. Dürfte zwar gehen, aber zumindest teilweise überflüssig. Ich muss da etwas weiter ausholen, weil es wichtig ist. Insbesondere auch für die, die mit OOP (notfalls Hint lesen) nicht recht was anzufangen wissen. Früher gab es Records. Das waren reine Daten. Üblich war und ist folgende Vorgehensweise (im Prinzip zumindest) : man liest aus einer Datenbank-Tabelle einen Datensatz (^= Record) in eine Variable und hat die Daten dann im Programm zur Verfügung. Ist doch schon mal gut, was ?

Irgendwann kam dann mal irgendwer auf die Idee, dass die Datensätze sowieso gelesen, geschrieben oder sontwas werden müssen. Wieso sollte man eigentlich den Datensätzen nicht gleich sagen, was sie machen können ? Die reinen Daten, also Records hatten plötzlich die Möglichkeit auch "Methoden" zu haben. Das wären dann die heutigen TObject, TClass etc. Typen.

Zurück zur Ausgangsfrage : es geht um Dateiname, Dateigroesse usw., also um ungefähr das, was TSearchRec sowieso hat. Man beachte auch das "Rec" im Namen. In meinem Beispiel benutze ich auch einen Record. Allerdings innerhalb der TObjectList. Diese kriegt notfalls noch Methoden verpasst. Der Record ist starr und braucht keine Methoden. xZise verwendet in seinem Bsp. TObject, obwohl er dafür gar keine Methoden braucht. Da würde es auch ein Record tun. Gut, das dürfte vernachlässigbaren Speicher-Mehrbedarf/Laufzeit bedeuten, im Prinzip aber auch nur Peanuts. 100 Bytes, 1 Millisekunde mehr, was solls ? Allerdings : Record ist mehr oder weniger egal. Wenn das OwnsObjects der TObjectList auch einiges (besser gesagt : sehr viel) selber erledigt, die TObject-Dinger muss ich trozudem mit create erzeugen, was bei Records überflüssig ist.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

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

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
 
#3

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
 
#4

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
 
#5

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
Antwort Antwort


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 23:57 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