Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Auf Objekt in der TObjectList zugreifen (https://www.delphipraxis.net/182893-auf-objekt-der-tobjectlist-zugreifen.html)

Der schöne Günther 25. Nov 2014 10:40

AW: Auf Objekt in der TObjectList zugreifen
 
Nein, wie denn? Ich dachte (bin mir nicht sicher), die alte TObjectList arbeitet mit
Delphi-Quellcode:
Pointer
oder
Delphi-Quellcode:
TObject
. Du kannst in einer Ableitung nicht einfach den Typ verschärfen, also gegen
Delphi-Quellcode:
TMeineKlasse
ersetzen.

DeddyH 25. Nov 2014 10:45

AW: Auf Objekt in der TObjectList zugreifen
 
Ob das besser oder sinnvoller ist, sei dahingestellt, ich zumindest habe das so gemacht.

Popov 25. Nov 2014 10:58

AW: Auf Objekt in der TObjectList zugreifen
 
Die TObjectList ist nicht sonderlich kompliziert, ich denke die baut auf TList auf. Wer also nichts erben will, bzw. die TObjectList nicht, kann den Code von TObjectList kopieren und an eigene Bedürfnisse modifizieren.

Bjoerk 25. Nov 2014 13:12

AW: Auf Objekt in der TObjectList zugreifen
 
Wozu? Meistens reicht es schon die property Items zu überschreiben:

Delphi-Quellcode:
  TSomeItems = class(TObjectList)
  private
    function GetSomeItem(Index: integer): TSomeItem;
  public
    property Items[Index: integer]: TSomeItem read GetSomeItem; default;
  end;

{ TSomeItems }

function TSomeItems.GetSomeItem(Index: integer): TSomeItem;
begin
  Result := TSomeItem(inherited Items[Index]);
end;

{ TSomeApp }

procedure TSomeApp.DoSomething;
begin
  Index := FSomeItems.Add(TSomeItem.Create);
  FSomeItems[Index].DT := Now;
end;

DeddyH 25. Nov 2014 13:22

AW: Auf Objekt in der TObjectList zugreifen
 
http://www.delphi-treff.de/tutorials/vcl/tobjectlist/3/, allerdings trifft der Text nicht ganz zu, denn die Methoden können gar nicht überschrieben werden, dazu müssten sie virtuell oder dynamisch sein. Tatsächlich werden sie im gezeigten Code also verdeckt. In den meisten Fällen ist das nicht so schlimm, aber wenn Polymorphie (z.B. ein TObjectList-Parameter) ins Spiel kommt, spielt das schon eine Rolle.

himitsu 25. Nov 2014 15:53

AW: Auf Objekt in der TObjectList zugreifen
 
Zitat:

Zitat von Bjoerk (Beitrag 1281029)
Wozu? Meistens reicht es schon die property Items zu überschreiben:

Jupp.

Nur überdecken/verdecken, da es ja nicht überschreibbar (override) ist.

DeddyH 25. Nov 2014 15:56

AW: Auf Objekt in der TObjectList zugreifen
 
Aber wenn ich nur Items anfasse, kann ich ja immer noch z.B. ein TEdit zur Liste hinzufügen. Das wird dann beim Items-Getter ganz böse knallen.

himitsu 25. Nov 2014 16:01

AW: Auf Objekt in der TObjectList zugreifen
 
Jupp, aber wenn man böse castet, dann bekommt man auch in die generischen Liste ein TEdit rein. (das Gegenteil von hier -> nicht casten)
Aber man könnte ja auch noch die Add- und InsertMethoden überdecken. :wink:

Und wenn man eine Variable auf TObjectList hat, dann ist dort ebenfalls wieder das alte Item.
Es ist halt nur in dem Typen überdeckt, aber im Vorfahren natürlich nicht. (bei den Generics gibt es das Problem nicht, da der Typ nicht mit dem Vorfahren kompatibel ist :stupid:)

DeddyH 25. Nov 2014 19:29

AW: Auf Objekt in der TObjectList zugreifen
 
Schau Dir doch einfach #15 nochmal an und folge dem Link. Das ist doch fast alles schon gesagt worden :stupid:

himitsu 25. Nov 2014 20:26

AW: Auf Objekt in der TObjectList zugreifen
 
Es fehlt nur noch Eines.

Wenn man Notify "überschreibt" und dort eine Typprüfung einbaut, dann könnte man ganz leicht dafür sorgen, daß nur erlaubte Typen in die Liste aufgenommen werden. :angel2:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr.
Seite 2 von 3     12 3      

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