Announcement

Collapse
No announcement yet.

"Class of TObject" geht nicht - oder doch?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • "Class of TObject" geht nicht - oder doch?

    Hallo,

    ich möchte eine Factory bauen, mit der ich beliebige Objekte instantiieren kann. Dazu habe ich versucht, das "class of" zu verwenden (alternativ gibts ja auch noch TClass):

    Code:
    type
      TmyFactoryClass = class of TObject;
    
    procedure Test;
    var
      myObj: TObject;
      myClass: TmyFactoryClass;
    begin
      myClass := TIrgendEineKonkreteKlasse;
      myObj := myClass.Create; <--- springt nicht in TIrgendEineKonkreteKlasse.Create!
    Das würde allerdings funktionieren, wenn ich anstatt TObject als Metaklasse eine Klasse nehme, die auch einen virtuellen konstruktor hat. Mit TObject scheint es nicht zu klappen, das Create ist da nicht virtuell (warum auch immer) und er springt dann nicht per Polymorphie in den Konstruktor meiner Klasse "TIrgendEineKlasse" sondern nur in den Konstruktor von "TObject". Die einzige Gemeinsamkeit aller meiner Objekte ist aber nun einmal TObjekt und da ich auch Zukaufskomponenten nutze, kann ich das auch nicht ändern.

    Hm, wozu gibt es dann überhaupt TClass, wenn das nicht funktioniert?

    Weiß jemand, wie man das trotzdem hinbekommen könnte? Oder habe ich etwas falsch gemacht?

    Momentan behelfe ich mir nun mit einer virtuellen Methode "CreateObjekt" die ich in allen Aberbungen meiner Objekte überschreiben werden muss. Dort wird dann ein Objekt instantiiert und als TObjekt zurückgeben ... das finde ich aber nicht schön.

    Viele Grüße,

    Patrick
Working...
X