AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Von TObjectList<T> erben?

Ein Thema von ryLIX · begonnen am 16. Feb 2010 · letzter Beitrag vom 18. Feb 2010
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Von TObjectList<T> erben?

  Alt 16. Feb 2010, 22:55
Ich würde gerne meine angepasste Objektliste auf Generics umstellen.
Nur ich frag mich schon die ganze Zeit wie nun die Klassendefinition aussehen muss.

Delphi-Quellcode:
TNonFoodList = class(TObjectList<TNonFood>)
TNonFoodList<T: TNonFood> = class(TObjectList<TNonFood>) //Gesehen bei StackOverflow
TNonFoodList<TNonFood> = class(TObjectList<T: class>)
Es müsste doch eigentlich die letzte Variante sein oder?
Da TObjectList<T> so definiert ist:
TObjectList<T: class> = class(TList<T>)
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
m.wollert

Registriert seit: 18. Aug 2003
Ort: Heilbronn
92 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Von TObjectList<T> erben?

  Alt 16. Feb 2010, 23:41
Hi,

für das was Du vermutlich anstellen willst, ist die Variante 1 die Richtige.

Ich gehe davon aus, dass Du eine verwaltete Liste mit Objekten vom Typ TNonFood erstellen möchtest.

Grüße
Michael
Michael
*Im Auftrag ewiger Jugend und Glückseligkeit*
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Von TObjectList<T> erben?

  Alt 16. Feb 2010, 23:49
Ja richtig erkannt es soll vom Typ TNonFood sein.
Is mir irgendwie entfallen das zu erwähnen

Danke für die Hilfe ich werds nachher mal probieren.

Edit:
TNonFoodList = class(TObjectList<TNonFood>) Ergibt:
Zitat:
[DCC Fehler] WarenContainerGenerisch.pas(12): E2003 Undeklarierter Bezeichner: 'TObjectList<>'
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 00:30
Generics.Collections hast du aber schon geöffnet?

PS: Bei Listen ist Vererbung unüblich, eine Komposition ist oft einfacher.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
ryLIX

Registriert seit: 16. Nov 2008
Ort: Westoverledingen
264 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 00:40
Zitat von Khabarakh:
Generics.Collections hast du aber schon geöffnet?

PS: Bei Listen ist Vererbung unüblich, eine Komposition ist oft einfacher.
Grbl das wars -.-
Jetzt compilliert es schon mal
Getestet hab ich aber noch nicht.

Was meinst du mit Komposition?
Im Moment bin ich bei der Umstellung auf Generics eh am überlegen ob eventuell ein TDictionary<TValue, TKey> nicht besser ist.

Eigentlich herrscht über die Generics bei mir grosse Verwirrung
Markus
Hamburflys, Scrubble-Fubble-Puff-Shake, Muffin-Purper-Gurk?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 07:54
[quote="ryLIX"]
Zitat von Khabarakh:
Generics.Collections hast du aber schon geöffnet?
Das "Blöde" an der Generics-Unit ist, daß da irgendwer auf eine total bescheuerte Idee gekommen ist
und die generischen Klassen genauso benannt hat, wie die Normalen.
Somit kommt es zu solchen blöden Namenspoblemen und irreführenden Fehlermeldungen.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#7

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 09:04
Zitat von Khabarakh:
PS: Bei Listen ist Vererbung unüblich, eine Komposition ist oft einfacher.
In diesem Fall handelt es sich aber nicht um klassische Vererbung, sondern um die Instanziierung(Typisierung?) eines generischen Typs.

Es ist z.B. auch nicht möglich, eine Variable eines generischen Typs zu deklarieren (außer als Feld in einer generische Klasse):

Delphi-Quellcode:
var
  List: TObjectList<T>;
läßt sich nicht compilieren.

Damit scheidet eine Komposition schon mal aus.

Man muss sich Generics einfach als Klassen-Vorlagen vorstellen. Erst durch die Bestimmung des oder der variablen Typen wird daraus eine verwendbare herkömmliche Klasse. Mit

Delphi-Quellcode:
type
  TNonFoodList = class(TObjectList<TNonFoodList>);
wird implizit eine Klassendeklaration erstellt, bei der alle "T" in TObjectList<T> durch TNonFood ersetzt werden.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 09:22
Zitat von Uwe Raabe:
Delphi-Quellcode:
var
  List: TObjectList<T>;
läßt sich nicht compilieren.
Und mit welcher Fehlermeldung?

Sowas läßt sich z.B. bei mir compilieren:
Delphi-Quellcode:
var
  List: TObjectList<TEdit>;
Zitat von Uwe Raabe:
Man muss sich Generics einfach als Klassen-Vorlagen vorstellen. Erst durch die Bestimmung des oder der variablen Typen wird daraus eine verwendbare herkömmliche Klasse.
Jupp, es wird praktisch beim Compilieren eine Kopie dieser Vorlage erstellt, die angegebenen Typen darin ersetzt und dann alles als eigenständiger Code kompiliert.
(es sei denn es wurde vorher schonmal eine gleichartige Typ-Kombination für diesem Generic kompiliert, dann wird diese natürlich wiederverwendet)

Dieses würde alle nötigen Codes doppelt in die Anwendung reinkompiliert ... einmal alles mit TEdit und dann nochmal alles mit TButton:
Es wäre praktisch so, als wenn man zwei Objektlisten im QuellCode "parallel" erstellt hätte.
Delphi-Quellcode:
var
  ListA: TObjectList<TEdit>;
  ListB: TObjectList<TButton>;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#9

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 10:31
Zitat von himitsu:
Zitat von Uwe Raabe:
Delphi-Quellcode:
var
  List: TObjectList<T>;
läßt sich nicht compilieren.
Und mit welcher Fehlermeldung?
[DCC Fehler] Unit12.pas(43): E2003 Undeklarierter Bezeichner: 'T'

Zitat von himitsu:
Sowas läßt sich z.B. bei mir compilieren:
Delphi-Quellcode:
var
  List: TObjectList<TEdit>;
Bei mir natürlich auch. Mit der Angabe von TEdit wird ja auch das "generische" aus dem Typ aufgelöst. Das unterstreicht meine Aussage, das man keine Variablen vom Typ eines Generics deklarieren kann (bis auf die besagte Ausnahme).
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 10:39
Achso ja, wenn du eine Variable deklarierst, dann müssen natürlich auch alle Typen aufgelöst werden,
denn "T" kennt der Compiler "zufällig" nicht und an dieser Stelle möchte er ja gern die Klasse erstellen, wofür er nunmal der fertig/vollständig deklarierten Typ benötigt ... z.B. für die spätere Speicherverwaltung und Dergleichen.

Witzig wäre es für dich geworden, wenn rein zufällig irgendein Typ mit dem Namen "T" an dieser Stelle existiert hätte.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 21:30 Uhr.
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