![]() |
tObject erstellen mittels tClass?
Moin moin,
ich versuche Objekte zu instanziieren wenn deren Classtype bekannt ist. So was in der Art wie Function CreateObject(t:tclass):tobject; begin result:=t.create; end; Mein Problem: Der Constructor vom Objekt wird nicht aufgerufen. Selbst nicht, wenn er virtuell ist. Wie bekomme ich das hin? gruss, Arthur |
Re: tObject erstellen mittels tClass?
Zitat:
TClass an sich hilft dir nicht viel weiter. Gerade weil der Konstruktor von TObject nicht virtuell ist. Du musst dir also eine neue Basisklasse aussuchen und der einen virtuellen Konstruktor verpassen:
Delphi-Quellcode:
type
TBaseClass = class public constructor Create; virtual; abstract; end; TBaseClassClass = class of TBaseClass;
Delphi-Quellcode:
...und nun sollte auch der Konstruktor aufgerufen werden.
var
classRef : TBaseClassClass; begin classRef := ... result := classRef.Create(); Die Alternative wäre AfterConstruction für den Initialisierungs code herzunehmen. Dadurch bist du nicht auf einen bestimmten Konstruktor angewiesen und auch der von TClass/TObject würde reichen. btw: Ich hab' deinen Namen irgendwo schon einmal gesehen, wahrscheinlich non-tech, right? |
Re: tObject erstellen mittels tClass?
Warum wurde der Constructor als Abstract deklariert? Was für ein Hintergedanke führte dazu?
|
Re: tObject erstellen mittels tClass?
Ein abstrakter Konstruktor? :shock:
Ich frag mich grad noch, was der Grund dafür ist, dass der Konstruktor nicht aufgerufen wird: Dass er statisch ist oder dass für TObject keine RTTI existiert. :gruebel: |
Re: tObject erstellen mittels tClass?
Der von TObject wird ja aufgerufen, aber da er nicht virtuell ist, kann er nicht überschrieben werden. Ein neuer Constructor in der Ableitung verdeckt den von TObject und belegt einen neuen Platz in der VMT (ein virtual/override würde ihn ersetzen in der VMT).
RTTI spielt hier keine Rolle. Die VMT wird vom Compiler gebaut und braucht keine RTTI, da die VMT Tabellen fest verdrahtet geschrieben werden (zumindest die Offsets für den Zugriff innerhalb der VMT). |
Re: tObject erstellen mittels tClass?
Zitat:
Wozu also eine Implementierung eines leeren Konstruktors liefern? ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:06 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