AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Auf Objekt in der TObjectList zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Objekt in der TObjectList zugreifen

Ein Thema von Luki206 · begonnen am 24. Nov 2014 · letzter Beitrag vom 26. Nov 2014
Antwort Antwort
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 13:12
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;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 13:22
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 15:53
Wozu? Meistens reicht es schon die property Items zu überschreiben:
Jupp.

Nur überdecken/verdecken, da es ja nicht überschreibbar (override) ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 15:56
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 16:01
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.

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 )
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (25. Nov 2014 um 16:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#6

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 19:29
Schau Dir doch einfach #15 nochmal an und folge dem Link. Das ist doch fast alles schon gesagt worden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 20:26
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#8

AW: Auf Objekt in der TObjectList zugreifen

  Alt 25. Nov 2014, 23:33
Es gibt mindestens 4 Varianten:
1.) man verwendet TObjectList und muss beim auslesen der Objekte casten
2.) man verwendet eine generische ObjektList (natürlich nur wenn man eine Delphi Version hat die das unterstützt)
3.) man leitet von TObjectList ab und überdeckt das Items[]-Property
4.) man erstellt eine Klasse die intern ein privates Objekt vom Typ TObjectList hat und präsentiert nach Aussen nur die Properties und Methoden die man für die Aufgabenstellung unbedingt braucht:
Delphi-Quellcode:
TSomeItems = class(TObject)
private
    FList : TObjectList;
public
    constructor Create;
    destructor Destroy;override;
    procedure Add(item:TSomeItem);
    function AddNew:TSomeItem;
    property Items[Index: integer]: TSomeItem read GetSomeItem; default;
    property Count:Integer read GetCount;
end;
Das bedeutet natürlich die meiste Schreibarbeit und den geringsten Grad an Wiederverwendbarkeit;
im Gegenzug kann man die Klasse auf seine Anforderungen genau zuschneiden und hat die beste Kontrolle darüber was in die Liste eingefügt oder aus der Liste gelöscht werden kann.
fork me on Github
  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 22:05 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-2025 by Thomas Breitkreuz