Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code von generischen Methoden/Klassen (https://www.delphipraxis.net/151949-code-von-generischen-methoden-klassen.html)

s.h.a.r.k 7. Jun 2010 16:48

Delphi-Version: 2010

Code von generischen Methoden/Klassen
 
Hallo zusammen,

und zwar programmiere ich seit geraumer Zeit mit Generics und bin echt zufrieden damit. Man kann sich das Leben sehr erleichtern (wobei ich gehört habe, das Generics unter D2009 nicht so toll waren :mrgreen: ). Jedenfalls habe ich noch nirgends gelesen, wie der Compiler generische Methoden und Klassen in Maschinencode umsetzt. Ich gehe mal davon aus, dass von den RTTI-Informationen regen Gebrauch gemacht wird, ansonsten kann ich mir das alles nicht so wirklich erklären, wie diese Magic sonst funktionieren sollte.

Vielleicht kann der eine oder andere hierbei Licht ins Dunkel bringen :thumb:

implementation 7. Jun 2010 16:55

AW: Code von generischen Methoden/Klassen
 
Die generischen Parameter werden nicht erst zur Laufzeit ausgewertet, sondern direkt vom Compiler, der dann die entsprechenden spezialisierten Klassen erstellt. Stell es dir etwa so vor:
Delphi-Quellcode:
type
  TGeneric<TGenParam> = class
  private
    Feld: TGenParam;
  end;

...

var
  xyz: TGeneric<Integer>;
  abc: TGeneric<string>;
Der Compiler macht macht etwa das folgende daraus: (bzw. behandelt es so um's korrekter auszudrücken)
Delphi-Quellcode:
type
  TGeneric_Integer = class
  private
    Feld: Integer;
  end;
  TGeneric_String = class
  private
    Feld: string;
  end;

var
  xyz: TGeneric_Integer;
  abc: TGeneric_string;
Zur Laufzeit muss da also überhaupt nix mehr passieren...

s.h.a.r.k 7. Jun 2010 17:10

AW: Code von generischen Methoden/Klassen
 
Achso, mit dieser (mehr oder weniger) naiven Art hätte ich nicht gerechnet. Ich habe mir da mehr oder weniger ein gewissen Zauber vorgestellt, den es aber scheinbar nicht gibt. Herzlichen Dank für die Info.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 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