Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Frage zu einer Programmier-Technik, die ich nicht kenne (https://www.delphipraxis.net/196049-frage-zu-einer-programmier-technik-die-ich-nicht-kenne.html)

MyRealName 18. Apr 2018 15:46

Frage zu einer Programmier-Technik, die ich nicht kenne
 
Jo, ich gebe es zum ich bin einer derjenigen, der viel zu tun hat auf Arbeit und manchmal es nicht schafft, auf dem Laufenden zu bleiben.

Ich habe mir letztens mal ein Video zum TFrameStand angesehen und kam an eine Stelle, wo ich nicht genau wusste, was er dort machte und da ich auch nicht weiss, wie diese Technik heisst, ist es schwer es nachzulesen. Die Codezeile aus einem der Demos ist diese :

Code:
FFrameInfo := FrameStand1.New<THelloWorldFrame>(Layout1, 'bluestand');
Das mit dem TFrameStand.New<Classname>(Parameter)

Wie heisst das und wo kann ich lernen, wie man es nutzt ? UNd vllt. seit wann gibt es das ? :)

Danke!!!

freimatz 18. Apr 2018 15:47

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Generics D2009

mkinzler 18. Apr 2018 15:47

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Nennt man Generics.

MyRealName 18. Apr 2018 15:49

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Ich nutze Generics immer nur mal mit TDictionary.
Ok, suche ich mal ein Tutorial,
Danke

himitsu 18. Apr 2018 17:05

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Generics fangen schon beim TArray<xyz> an und gehen über die anonymen Methoden hin zu noch viel mehr.

Delphi-Quellcode:
type
  X = array of irgendwas;
  Y = TArray<irgendwas>;
Wenn du Letzteres in zwei Units definiert hast, dann sind diese Typen kompatibel,
während bei X das zwei unterschiedliche Typen sind, wo man Variablen/Parameter nicht untereinander zuweisen kann.

MyRealName 18. Apr 2018 18:38

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
das allein schon vestehe ich nicht :

Code:
 
 TFrameInfo<T: TFrame> = class
:roll:

Ghostwalker 19. Apr 2018 05:54

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Zitat:

Zitat von MyRealName (Beitrag 1399742)
das allein schon vestehe ich nicht :

Code:
 
 TFrameInfo<T: TFrame> = class
:roll:

Ich steh zwar auch noch am Anfang, was man mit Generics alles machen kann, aber hier mal ein Versuch das
grob zu erklären.

TFrameInfo ist eine Klasse mit einem variablen Teil T, der ein TFrame oder von TFrame abgleitet Klasse sein muß. :)

Am einfachsten, denk ich, lassen sich Generics anhand von Listen erklären. Früher (Vor den Generics) musste man für jeden Datentyp eine eigene Ableitung einer TList-Klasse bauen, obwohl die ganze Verwaltung und Funktionalität die gleiche war.

Mit Generics kannst du einfach eine TList des benötigen Datentypes definieren und gut.

TigerLilly 19. Apr 2018 06:58

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
"Generics" ist ein wenig hilfreicher Name. Besser wäre "parametrisierbarer Typ". Soll heißen, du bestimmst den Typ einer Definition durch einen Parameter.

Du definierst deine Klasse ganz allgemein: TList<T> und implementierst deine Methoden + wenn du den Typ im Code brauchst, benutzt du <T>.

Brauchst du dann einen konkreten Typ, übergibst du den konkreten Typ: TList<integer>, TList<Float>, TList<String>, aber natürlich auch TList<TDataset> etc.

Den Vorteil siehst du schon?

Siehe auch:
https://de.wikipedia.org/wiki/Generischer_Typ
http://docwiki.embarcadero.com/RADSt...n_von_Generics
https://www.thoughtco.com/understand...delphi-1058229

Mavarik 19. Apr 2018 08:30

AW: Frage zu einer Programmier-Technik, die ich nicht kenne
 
Früher nannte man das Copy-Buffer Programmierung, aber generics klingt besser... :stupid:

Beispiel: Du hast einen Quicksort-Routine, die ein array aus Integer sortieren kann.

Wenn Du jetzt Strings sortieren willst oder Records mit irgendwelchen Daten, kopierst Du die Quicksort-Routine
und schreibst überall wo Integer steht String oder TMyRecord...

Mitte : Integer => Mitte : String;

Jetzt kommen die Generics ins Spielt: Hier steht dann Mitte : T wobei es nicht T heißen muss. T ist hier nur ein Platzhalten. Es könnte auch
Mitte : TKopierterTyp heißen - ist das gleiche... Class<TKopierterTyp>

Bei mehrerer Parametern, sieht man das schon mal : TConverter<TSource,TDest> = Class

Was wan man früher mit Copy-Buffer gemacht hat - also die Routine komplett kopiert und den Typen geändert. Macht heute der Compile mit Compiler-Magic...

Somit kannst Du allgemeine Routinen schreiben die dann "beliebige" Typen verwenden können. Damit der Compiler auf gewisse Typenbezogene Methoden zugreifen kann,
kann man <T:TFrame> eingrenzen. T muss dann mindestens vom Type TFrame beziehungsweise eine Ableitung von TFrame sein...

Mavarik


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