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.