AGB  ·  Datenschutz  ·  Impressum  







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

Generics <> Templates ?

Ein Thema von Ghostwalker · begonnen am 29. Jun 2007 · letzter Beitrag vom 29. Jun 2007
 
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Generics <> Templates ?

  Alt 29. Jun 2007, 14:57
Zitat von Ghostwalker:
Generics:

Untypisierte "Vorlage", die der Compiler compilieren kann. Diese werden aber erst zur Laufzeit
entsprechend typisiert werden. Was aber auch bedeutet, das eine Typprüfung erst zur Laufzeit
stattfinden kann, da erst da der Typ bekannt ist.


Ist das so richtig ?
Die Typprüfung findet bereits zur Compilezeit statt, allerdings dort wo dein instantiierter Typ deklariert wird - dort kannst du für <T> nämlich nur einen passenden Typen einsetzen.

Ein schönes Beispiel dafür sind typisierte Listen:
Delphi-Quellcode:
type
  TGenericList<T> = class
    where T is TObject
  private
    function GetItem(Index: Integer): T;
    procedure SetItem(Index: Integer; const Value: T);
  public
    procedure Add(AValue: T);
    property Items[Index: Integer]: T read GetItem write SetItem;
  end;
Diese Klasse wir fertig übersetzt in Maschinensprache genau so aussehen wie TObjectList - die Elemente sind TObjects. Sie hat jedoch den Vorteil, dass man Eigenschaften wie "Items" und Methoden wie "Add" wirklich typisieren kann.

Wenn du allerdings einen Typen davon ableitest mit (ich kenne mich mit der Chrome-Syntax nicht aus, kann also falsch sein)
Delphi-Quellcode:
var
  WinControlList = TGenericList<TWinControl>;
dann kann der Compiler schon prüfen, dass nur TWinControl-Objekte darin abgelegt werden. Dann sieht es so aus als ob du den Typ deklariert hättest mit <TWinControl> statt <T>:
Delphi-Quellcode:
type
  // Geht so natürlich nicht
  TGenericList<TWinControl> = class
  private
    function GetItem(Index: Integer): TWinControl;
    procedure SetItem(Index: Integer; const Value: TWinControl);
  public
    procedure Add(AValue: TWinControl);
    property Items[Index: Integer]: TWinControl read GetItem write SetItem;
  end;
... und der Compiler kann dann beim Übersetzen schon einen Typfehler anmeckern, wenn du irgendetwas anderes als ein TWinControl zu deiner Liste hinzufügen willst.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
 


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 19:01 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