AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TPersistent über Findclass erzeugen und Constructor
Thema durchsuchen
Ansicht
Themen-Optionen

TPersistent über Findclass erzeugen und Constructor

Ein Thema von Rainer Wolff · begonnen am 25. Nov 2008 · letzter Beitrag vom 25. Nov 2008
Antwort Antwort
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#1

TPersistent über Findclass erzeugen und Constructor

  Alt 25. Nov 2008, 14:48
Hallo Delphi-User,

Ich will Klassen über FindClass nach folgendem Schema erzeugen. Ich wundere mich aber, warum kein Constructor der Klasse TTest aufgerufen wird. Anscheinend wird nur der Constructor von TObject aufgerufen, aber nicht der von TTest.
Erzeuge ich jedoch TTest direkt über einen Aufruf TTest.Create, scheint der Constructor aufgerufen zu werden.

Wo liegt hier noch mein Fehler?

Vielen Dank

Rainer

Delphi-Quellcode:
  TTest = class(TPersistent)
  private
    FX: Integer;
  public
    constructor Create; virtual;
    property X: Integer read FX write FX;
  end;

constructor TTest.Create;
begin
  x:=5;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  tc: TPersistentClass;
begin
  tc:=FindClass('TTest');
  p:=TPersistent(tc.Create);
end;

initialization
  RegisterClass(TTest);

finalization
  UnRegisterClass(TTest);
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: TPersistent über Findclass erzeugen und Constructor

  Alt 25. Nov 2008, 14:52
Versuch es mal so:

Delphi-Quellcode:
TTest = class(TPersistent)
  private
    FX: Integer;
  public
    constructor Create; virtual; override;
    property X: Integer read FX write FX;
  end;

constructor TTest.Create;
begin
  inherited Create;
  FX:=5;
end;
Markus Kinzler
  Mit Zitat antworten Zitat
Rainer Wolff

Registriert seit: 25. Okt 2005
Ort: Bretten
321 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TPersistent über Findclass erzeugen und Constructor

  Alt 25. Nov 2008, 15:00
Geht nicht

    constructor Create; virtual; override;
Zitat:
[Pascal Fehler] Unit1.pas(19): E2169 Felddefinition nicht erlaubt nach Methoden oder Eigenschaften
    constructor Create; override; virtual;
Zitat:
[Pascal Fehler] Unit1.pas(19): E2170 Eine nichtvirtuelle Methode kann nicht überschrieben werden
Ausserdem funktioniert der Constructor ja, wenn ich ihn über TTest.Create erzeuge.

Ich habe ein funktionierendes Beispiel aus der DP, das aber mit Objekten arbeitet, die von TComponent statt TPersistent abgeleitet sind, da funktionierts komischerweise.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TPersistent über Findclass erzeugen und Constructor

  Alt 25. Nov 2008, 15:35
Hallo Rainer,

der Konstruktor von TPersistent ist statisch, du benötigst also eine eigene Klassenreferenz, um dem Compiler deinen Wunsch mitzuteilen:

Delphi-Quellcode:
type
  TTestClass = class of TTest;
  
procedure TForm1.FormCreate(Sender: TObject);
var
  tc: TPersistentClass;
  p : TPersistent; // oder TTest
begin
  tc:=FindClass('TTest');
  p:=TTestClass(tc).Create;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz