Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#14

AW: tlist. get "überschreiben", Fehlermeldung verhindern

  Alt 24. Jul 2012, 18:16
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)

nicht erlaubt:
Fehlermeldung?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat