![]() |
AW: Generisches Alias von TFrame
Zitat:
|
AW: Generisches Alias von TFrame
Zitat:
Edit: Hast recht, ich hab verkehrt herum gedacht, aber so sollte das funktionieren (auf Erstellen von Objekten wo nicht benötigt hab ich für das Beispiel verzichtet):
Delphi-Quellcode:
{$APPTYPE CONSOLE}
type TFruchtKorbFactory = class; TFrucht = class function GibFruchtKorb(const factory: TFruchtKorbFactory): TObject; virtual; abstract; end; TBanane = class(TFrucht) function GibFruchtKorb(const factory: TFruchtKorbFactory): TObject; override; end; TApfel = class(TFrucht) function GibFruchtKorb(const factory: TFruchtKorbFactory): TObject; override; end; TFruchtKorbFactory = class function CreateInstance(const banane: TBanane): TObject; overload; function CreateInstance(const apfel: TApfel): TObject; overload; end; TGenericDings<T: TFrucht, constructor> = class procedure Wuppdi; end; { TBanane } function TBanane.GibFruchtKorb(const factory: TFruchtKorbFactory): TObject; begin Result := factory.CreateInstance(Self); end; { TApfel } function TApfel.GibFruchtKorb(const factory: TFruchtKorbFactory): TObject; begin Result := factory.CreateInstance(Self); end; { TFruchtKorbFactory } function TFruchtKorbFactory.CreateInstance(const apfel: TApfel): TObject; begin Writeln('erstelle fruchtkorb für apfel'); end; function TFruchtKorbFactory.CreateInstance(const banane: TBanane): TObject; begin Writeln('erstelle fruchtkorb für banane'); end; { TGenericDings<T> } procedure TGenericDings<T>.Wuppdi; var frucht: T; factory: TFruchtKorbFactory; begin frucht := T.Create; // das hier wird für den virtual dispatch von GetWhatever benötigt frucht.GibFruchtKorb(factory); // Was hier nicht gehen würde wäre: factory.CreateInstance(frucht); end; var apfeldings: TGenericDings<TApfel>; bananendings: TGenericDings<TBanane>; begin apfeldings.Wuppdi; bananendings.Wuppdi; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 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