Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: FormularArray den richtigen Create aufrufen! Wie?

  Alt 30. Jan 2014, 14: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 14:17 Uhr)
  Mit Zitat antworten Zitat