Bei TObjectList ist die Notification schon fertig überschrieben.
Man kann im Constructor oder später über OwnsObjects festlegen, ob die enthaltenen Objekte freigegeben werden sollen.
.Free gibt es immer, denn das ist im Basistyp "TObject" deklatiert, von dem jede Klasse erbt.
Destroy besser nicht direkt aufrufen. (das wird dann intern vom Free aufgerufen)
Nun ja, das ist ja grade der Grund/Vorteil ...
- man muß nicht mehr casten und kann sich dabei auch nicht mehr vertun
- wenn man außerhalb keine "bösen" Casts macht, dann kann man ganz einfach davon ausgehn, daß in der Liste immer nur die vorgegebenen Objekte drinnen sind.
Wie bei der restlichen Vererbung gilt auch hier:
- Es können die angegebenen Typen/Klassen/Objekte in diese Listen rein und alle Nachfahren
Eine
TList<xyz>
ist also eine Art
array of xyz
(PS:
TArray<xyz>
), mit ein paar mehr Features/Hilfsfunktionen.
Man kann sich dsa teilweise sehr viel sparen. (versuch mal das Selbe mit einer normalen TList + Record-Pointer + New + Dispose + Notify überschreiben oder mit einer TObjectList + TXyz als Objekt, inkl. Create und Co.)
Delphi-Quellcode:
type
TXyz = record
s: string;
i: Integer;
end;
var
Liste: TList<TXyz>;
X: TXyz;
Z: Integer;
begin
Liste := TList<TXyz>.Create;
try
X.s := 'abc';
X.i := 123;
Liste.Add(X);
X.s := 'def';
X.i := 456;
Liste.Add(X);
X.s := 'xyz';
X.i := 789;
Liste.Add(X);
for Z := 0 to Liste.Count - 1 do
WriteLn(X[Z].s, X[Z].i);
for X in Liste do
WriteLn(X.s, X.i);
finally
Liste.Free;
end;
Den Namespace in generics.collections.tlist kannst du weglassen. (Delphi weiß anhand des <...>, ob generisch oder nicht).
Tipp: Es gibt ganz viele Turorial-Videos bei Emba, Youtube und Co.
Bleibt trotzdem meine Anfrage der abgeleiteten Listen mit abgeleiteten Objekten übrig.
Wie überall halt.
In eine Variable TMemo bekommst du ja auch keine TButton rein. (offiziell und ohne böse Casts)
Fehlermeldung?