![]() |
Von TObjectList<T> erben?
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:
Es müsste doch eigentlich die letzte Variante sein oder?
TNonFoodList = class(TObjectList<TNonFood>)
TNonFoodList<T: TNonFood> = class(TObjectList<TNonFood>) //Gesehen bei StackOverflow TNonFoodList<TNonFood> = class(TObjectList<T: class>) Da TObjectList<T> so definiert ist:
Delphi-Quellcode:
:gruebel: :gruebel:
TObjectList<T: class> = class(TList<T>)
|
Re: Von TObjectList<T> erben?
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 |
Re: Von TObjectList<T> erben?
Ja richtig erkannt es soll vom Typ TNonFood sein.
Is mir irgendwie entfallen das zu erwähnen :roll: Danke für die Hilfe ich werds nachher mal probieren. Edit:
Delphi-Quellcode:
Ergibt:
TNonFoodList = class(TObjectList<TNonFood>)
Zitat:
|
Re: Von TObjectList<T> erben?
Generics.Collections hast du aber schon geöffnet?
PS: Bei Listen ist Vererbung unüblich, eine Komposition ist oft einfacher. |
Re: Von TObjectList<T> erben?
Zitat:
Jetzt compilliert es schon mal :D 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. :roll: Eigentlich herrscht über die Generics bei mir grosse Verwirrung :? |
Re: Von TObjectList<T> erben?
[quote="ryLIX"]
Zitat:
und die generischen Klassen genauso benannt hat, wie die Normalen. Somit kommt es zu solchen blöden Namenspoblemen und irreführenden Fehlermeldungen. |
Re: Von TObjectList<T> erben?
Zitat:
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:
läßt sich nicht compilieren.
var
List: TObjectList<T>; 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:
wird implizit eine Klassendeklaration erstellt, bei der alle "T" in TObjectList<T> durch TNonFood ersetzt werden.
type
TNonFoodList = class(TObjectList<TNonFoodList>); |
Re: Von TObjectList<T> erben?
Zitat:
Sowas läßt sich z.B. bei mir compilieren:
Delphi-Quellcode:
var
List: TObjectList<TEdit>; Zitat:
(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>; |
Re: Von TObjectList<T> erben?
Zitat:
Zitat:
|
Re: Von TObjectList<T> erben?
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. :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 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 by Thomas Breitkreuz