![]() |
was ist der Sinn von Templates/Generics ?
wenn man schreibt:
Delphi-Quellcode:
kann man doch auch gleich den "Create" Konstrucktor überladen ?
FooResult := TFoo<String>.Create('Hello Free Pascal');
Delphi-Quellcode:
oder seh ich da was falsches ?
type
TFoo = class public Create; overload; Create(String); ... end; |
AW: was ist der Sinn von Templates/Generics ?
Und das machst Du dann für jeden erdenklichen Datentyp inkl. selbstbdeklarierte?
|
AW: was ist der Sinn von Templates/Generics ?
na irgendwie muss man doch dann doch prüfen, welcher Datentyp da dann übergeben wurde ?
im Fall von TFoo<String>.Create in etwa so: IF Type = String THEN ... also ich seh da keinen echten Mehrwert. |
AW: was ist der Sinn von Templates/Generics ?
Wieso musst Du das prüfen? Wenn ich eine TList<TBla> deklariere, dann weiß ich, dass da nur TBla-Elemente enthalten sein können.
|
AW: was ist der Sinn von Templates/Generics ?
Zitat:
Dann hätte das wirklich keinen Mehrwert. |
AW: was ist der Sinn von Templates/Generics ?
also ein Erweiterung von: TList.Objects (die ja nur auf Pointer ausgelegt sind)
obwohl, da könnte man doch auch einen Cast anlegen ? Weil, wofür sollte man Datentypen im Code behandeln, die vorher nicht bekannt sind ? |
AW: was ist der Sinn von Templates/Generics ?
Generics sind dafür gedacht, generischen Code zu schreiben( ja, daher der Name). Das bedeutet, dass man Code entwickelt, der nicht auf einen bestimmten Datentyp festgelegt ist. Zur Compiletime wird der generische Platzhalter dann durch den konkret benutzten Datentyp ersetzt.
|
AW: was ist der Sinn von Templates/Generics ?
Ein kleines Beispiel:
Delphi-Quellcode:
In echtem Code wird das natürlich deutlich umfangreicher. Aber für den Anfang sollte das reichen.
uses
System.Generics.Collections; type TMyValue<T> = class private FValue: T; procedure SetValue(const Value: T); public property Value: T read FValue write SetValue; end; procedure Test; var ValInteger: TMyValue<Integer>; ValList: TMyValue<TList<Integer>>; begin ValInteger := TMyValue<Integer>.Create; try ValInteger.Value := 42; ShowMessage(ValInteger.Value.ToString); finally ValInteger.Free; end; ValList := TMyValue<TList<Integer>>.Create; try ValList.Value := TList<Integer>.Create; ValList.Value.Add(11); ValList.Value.Add(33); ValList.Value.Add(42); ShowMessage(ValList.Value[2].ToString); finally ValList.Free; end; end; procedure TMyValue<T>.SetValue(const Value: T); begin FValue := Value; end; |
AW: was ist der Sinn von Templates/Generics ?
oh Danke.
dachte ich mirs doch: Generics = Vorlagen und Erweiterung von Cast/Pointern, so dass statt einen Pointer, ein konkreter Datentyp bezeichnet/gekennzeichnet wird. macht Sinn... anstelle mit Pointern zu jonglieren, ist dann durch Generics gewährleistet, welcher Typ verwendet wird... ohne das jetzt getestet zu Haben: - können Generics "vererbt" werden (also die Klassen durch Sub-Classing erweitert werden ? |
AW: was ist der Sinn von Templates/Generics ?
Hab ich zwar noch nicht gemacht, aber wieso sollte das nicht gehen? Man muss halt darauf achten, dass die Ableitung auch wieder generisch ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 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