Hallo Community,
ich habe ein großes Problem an dem ich nun mitlerweile schon eine ganze weile Bastel, jedoch nicht auf die Lösug komme.
Ich arbeite an einer erweiterten Version einer Objekt orientierten Datenbank, vielmehr an einer Komponente, die dies mit relationalen Datenbanken ermöglicht. Bis jetzt hat auch alles wunderbar funktioniert, bis jetzt ... Nachdem ich nun auch Klassenobjekte einbinden möchte, habe ich folgendes Problem.
Es wird der falsche konstruktor aufgerufen! Kleines Beispiel zur besseren rekonstruktion:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
TTestKlasse=class(TPersistent)
public
procedure LoadChild;
private
Child:TTestKlasse;
published
Constructor create;
destructor destroy;
override;
end;
TTestKlasse2=class(TTestKlasse)
public
List:TStringList;
T:
String;
published
constructor create;
destructor destroy;
override;
end;
TTestKlasseClass =
class of TTestKlasse;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TTestKlasse2 }
constructor TTestKlasse2.create;
begin
List:=TstringList.create;
List.add('
Hallo');
T:='
Hallo';
end;
destructor TTestKlasse2.destroy;
begin
List.free;
inherited;
end;
{ TTestKlasse }
constructor TTestKlasse.create;
begin
end;
destructor TTestKlasse.destroy;
begin
inherited;
end;
procedure TTestKlasse.LoadChild;
var TCC:TTestKlasseClass;
begin
TCC:=TTestKlasseClass(FindClass('
TTestKlasse2'));
Child:=TCC.create;
showmessage(TTestKlasse2(Child).T);
showmessage(TTestKlasse2(Child).List.Text);
end;
procedure TForm1.Button1Click(Sender: TObject);
var TC:TTestKlasse;
begin
registerclass(TTestKlasse2);
TC:=TTestklasse.create;
TC.loadChild
end;
end.
Das Problem ist hier, dass nicht der Konstruktor der Klasse TTestKlasse2 sondern nur der Konstruktor der Klasse TTestKlasse aufgerufen wird! Wenn ich jedoch den Debugger bemühe, sehe ich, dass die Variable TCC eindeutig vom Typ TTestKlasse2 ist! Auch wird der Speicher korrekt Allokiert, so ist die Variable T zugreifbar, auch wenn sie leer ist.
Änder ich das class of in class of TTestKlasse2 funktioniert das ganze, was aber nicht sinn der Sache ist!
Ich hoffe ihr könnt mir helfen!
Danke!