Ich seh in dem Code nich die Stelle, wo du die Rezept Instanz erstellst, aber gemäß dieser
Unit oben bist du dort nicht mehr generisch, sondern leitest von einer generischen Spezialisierung ab, da die generische Klasse nunmal abstrakte Methoden hat - deshalb habe ich meinen Satz von vorher hier nochmal zitiert.
Verstehe.
Gemaess meinem Kommentar im Code
// Rezept: TKRezept; // So geht es, generisch nicht!
, kann ich das Model.Rezept als TKRezept deklarieren und mit
TKRezept.Create;
initialisieren, dann funktioniert natuerlich alles (solange der ProgrammAdapter als TProgrammAdapter<TKSchritt> erstellt wird).
Aber das widerspricht ja dem Zweck dieser generischen Struktur, ich will ja auch das Rezept in generischer Abhaengigkeit vom Rest erstellen. Genau das ist der Punkt, an dem ich scheitere; wenn ich im Model 2 Variationen,
KRezept: TKRezept;
und
MRezept: TMRezept;
ablegen muss, die ich konditional bestelle, bin ich ja in genau meiner Zwickmuehle, dass ich viel code zwiespalten muss, obwohl er eigentlich gleich ist. Eine meiner Anfangs-Motivationen zu generics zu greifen.
Gibt es zu diesem Problem innerhalb der Delphi generics ueberhaupt eine Loesung?
Delphi-Quellcode:
constructor TProgrammModel<T>.Create;
begin
// Rezept := TKRezept.Create; // geht (Deklaration auch als Rezept: TKRezept;)
// Rezept := TKRezept.Create; // scheitert bei Deklaration als Rezept: TRezept<T>; natuerlich
Rezept := TRezept<T>.Create; // geht wie besprochen nicht: Abstrakte Fehler
end;