Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   was ist der Sinn von Templates/Generics ? (https://www.delphipraxis.net/215982-ist-der-sinn-von-templates-generics.html)

paule32.jk 7. Okt 2024 17:59

was ist der Sinn von Templates/Generics ?
 
wenn man schreibt:

Delphi-Quellcode:
FooResult := TFoo<String>.Create('Hello Free Pascal');
kann man doch auch gleich den "Create" Konstrucktor überladen ?

Delphi-Quellcode:
type
  TFoo = class
  public
    Create; overload;
    Create(String);
    ...
  end;
oder seh ich da was falsches ?

DeddyH 7. Okt 2024 18:28

AW: was ist der Sinn von Templates/Generics ?
 
Und das machst Du dann für jeden erdenklichen Datentyp inkl. selbstbdeklarierte?

paule32.jk 7. Okt 2024 18:39

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.

DeddyH 7. Okt 2024 18:41

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.

jaenicke 7. Okt 2024 18:42

AW: was ist der Sinn von Templates/Generics ?
 
Zitat:

Zitat von paule32.jk (Beitrag 1541903)
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.

Du willst ja gerade etwas machen, das für mehrere Datentypen gilt. Zum Beispiel eine Liste TList<Integer> oder TList<TForm>. Darin unterscheidest du aber nicht die ganzen konkreten Typen.

Dann hätte das wirklich keinen Mehrwert.

paule32.jk 7. Okt 2024 18:46

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 ?

DeddyH 7. Okt 2024 18:49

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.

jaenicke 7. Okt 2024 19:02

AW: was ist der Sinn von Templates/Generics ?
 
Ein kleines Beispiel:
Delphi-Quellcode:
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;
In echtem Code wird das natürlich deutlich umfangreicher. Aber für den Anfang sollte das reichen.

paule32.jk 7. Okt 2024 19:10

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 ?

DeddyH 7. Okt 2024 19:12

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.
Seite 1 von 4  1 23     Letzte »    

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