Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
Delphi 10 Seattle Enterprise
|
AW: FormularArray den richtigen Create aufrufen! Wie?
30. Jan 2014, 15:09
TFormClass kannte ich bisher noch nicht...
Wenn es das nicht geben würde, dann würde es man sich einrichten - was man auch macht, wenn man vererbte Klassen ohne Standard-Konstruktor hat
Delphi-Quellcode:
type
TFoo = class;
TFooClass = class of TFoo;
TFoo = class
constructor Create( ABar : TBar ); virtual;
class function CreateFoo( AFooClass : TFooClass; ABar : TBar ) : TFoo; overload;
// Registrieren von Nachfahren und erzeugen über den Klassen- oder Alias-Namen
class procedure RegisterClass( AFooClass : TFooClass ); overload;
class procedure RegisterClass( const AAlias : string; AFooCLass : TFooClass );
class function CreateFoo( const AName : string; ABar : TBar ) : TFoo; overload;
end;
TSomeFoo = class( TFoo )
end;
TConcreteFoo = class( TFoo )
constructor Create( Bar : TBar ); override;
end;
class function TFoo.CreateFoo( AFooCLass : TFooClass; ABar : TBar ) : TFoo;
begin
Result := AFooCLass.Create( ABar );
end;
function CreateFooInstance( AFooClass : TFooClass; ABar : TBar ) : TFoo;
begin
Result := AFooClass.Create( ABar );
end;
var
LFoo : TFoo;
LBar : TBar;
// Erzeugt eine TConcreteFoo-Instanz
LFoo := CreateFooInstance( TConcreteFoo, LBar );
LFoo := TFoo.CreateFoo( TConcreteFoo, LBar );
// Erzeugt eine TSomeFoo-Instanz
LFoo := CreateFooInstance( TSomeFoo, LBar );
LFoo := TFoo.CreateFoo( TSomeFoo, LBar );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
Geändert von Sir Rufo (30. Jan 2014 um 15:17 Uhr)
|