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 2 von 4     12 34      
Benutzerbild von Uwe Raabe
Uwe Raabe

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 11:06
Zitat von himitsu:
Witzig wäre es für dich geworden, wenn rein zufällig irgendein Typ mit dem Namen "T" an dieser Stelle existiert hätte.
Sollte das mal vorkommen, werde ich dir eine Karte aus der Klapsmühle schreiben...
Uwe Raabe
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#12

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 13:02
Zitat von himitsu:
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.
Das ist ganz und gar nicht blöd. Bei überladenen Routinen und Methoden kommt auch jeder klar, wenn er sich einmal die Signaturen dazu ansieht:
Delphi-Quellcode:
procedure Überladen; overload; // "Überladen()"
procedure Überladen(const Wert: Integer); overload; // "Überladen(Integer)"
Bei Typen funktioniert es gleichermaßen:
Delphi-Quellcode:
TObjectList = class { ... } end; // "TObjectList()"
TObjectList<T> = class { ... } end; // "TObjectList(Typ)"
Gerade das macht es so einfach, und man muss sich nicht so viele Bezeichner merken.
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 14:04
Zitat von himitsu:
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.
Tja, die alten Namen passen eben einfach perfekt, alternative will ich mir gar nicht vorstellen .
/add: Und Panthrax muss ich auch recht geben, ist imo eher eine Vereinfachung als potentielle Verwirrung.

Zitat von Uwe Raabe:
In diesem Fall handelt es sich aber nicht um klassische Vererbung, sondern um die Instanziierung(Typisierung?) eines generischen Typs.
Nö. Sobald ein class vorkommt, ist das ganz normale Vererbung. Innerhalb des class wird in der Tat ein generischer Typ instanziert, aber dafür braucht man keine Vererbung, es genügt ein Alias:
type TNonFoodList = TObjectList<TNonFood>; Solange wir aber nicht über TList<TDictionary<... reden, ist das aber ebenfalls unüblich, man sollte im Code einfach direkt TObjectList<TNonFood> verwenden.

Zitat von himitsu:
Es wäre praktisch so, als wenn man zwei Objektlisten im QuellCode "parallel" erstellt hätte.
Ich gehe stark davon aus, dass es wie beim .NET-Jitter gelöst wurde: Für jeden Value Type jeweils eine Kopie, für alle Reference Types (wahrscheinlich nur alle Klassentypen) eine Kopie zusammen.

Zitat von Uwe Raabe:
Das unterstreicht meine Aussage, das man keine Variablen vom Typ eines Generics deklarieren kann (bis auf die besagte Ausnahme).
Anders ausgedrückt: Um einen offenen generischen Typ zu verwenden, muss er geschlossen, also alle formalen Typparameter durch konkrete Typen oder Typparameter der umgegebenden Klasse/Methode ersetzt werden.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#14

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 16:45
Also unter FPC werden Generics so spezialisiert:
Delphi-Quellcode:
type
  TNonFoodList = specialize TList<TNonFood>;
Es wundert mich wirklich, dass das unter Delphi vollkommen anders aussieht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 16:54
Zitat von implementation:
Es wundert mich wirklich, dass das unter Delphi vollkommen anders aussieht.
Eventuell hatte man es nicht hinbekommen dem Compiler ohne ein Keyword wie "specialize" beizubringen, daß gleich ein generischer Typ kommt?

in C ist es auch nicht nötig:
http://msdn.microsoft.com/en-us/magazine/cc163754.aspx
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 17:03
Zitat von implementation:
Es wundert mich wirklich, dass das unter Delphi vollkommen anders aussieht.
Weil für quasi jedes neuere Sprachfeature und jede neuere API C#/Java Pate standen und sich für FPC wahrscheinlich überhaupt niemand interessiert hat . Wüsste wirklich nicht, warum man so ein vollkommen überflüssiges Keyword einführen sollte; in C# würde mich das jedenfalls in den Wahnsinn treiben, wenn ich jeden Typ explizit instanzieren müsste.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#17

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 17:07
Hab grad mal auf FreePascal.org nachgeschlagen - die Syntax hat sich mal wieder geändert.
Jetzt geht's angeblich auch so: (noch nicht getestet)
Delphi-Quellcode:
// tom proposal:
type
  TNonFoodList = TObjectList<TNonFood>;

// dannym proposal
type
  TNonFoodList = TObjectList of TNonFood;

// plugwash:
type
  TNonFoodList = TObjectList[TNonFood];
Und so 'nen PublicJoke-Proposal mit generischen Units gibt's auch noch.
Da steigt doch kein Mensch mehr durch...

[ADD]
Die ham sogar generische Routinen eingeführt - sowas hab ich noch nie gesehen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 17:25
Zitat von implementation:
Da steigt doch kein Mensch mehr durch...
Ja, ist voll toll, wenn es jetzt jeder anders machen kann und keiner mehr den Code des Anderen versteht.

http://wiki.freepascal.org/Generics
$2B or not $2B
  Mit Zitat antworten Zitat
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#19

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 17:26
Zitat von himitsu:
Eventuell hatte man es nicht hinbekommen dem Compiler ohne ein Keyword wie "specialize" beizubringen, daß gleich ein generischer Typ kommt?
FPC war einfach schneller bei der Sprachweiterung, und man hatte sich einfach etwas überlegen müssen... Man hatte sich eben für das Schlüsselwort "specialize" entschieden.


Zitat von implementation:
Die ham sogar generische Routinen eingeführt - sowas hab ich noch nie gesehen
Hm!?
class procedure Generics.Collections.TArray.Sort<T>(...);
"Es gibt keine schlimmere Lüge als die Wahrheit, die von denen, die sie hören, missverstanden wird."
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#20

Re: Von TObjectList<T> erben?

  Alt 17. Feb 2010, 17:30
Ne, so:
Delphi-Quellcode:
function generic(T) Max(A, B: T): T;
 begin
   if A < B then
     Result := B
   else
     Result := A;
 end;
Ziemlich am Ende der Wiki-Seite steht aber was davon, es würde bisher nur eine Notlösung für Generics laufen. Also wer weiß, ob das wirklich schon alles klappt...

[ADD]
Grad getestet, läuft noch nicht.
Sind alles nur Zukunftspläne, die da auf der Wikiseite stehen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 11:20 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