![]() |
Klassen zur Laufzeit dynamisch erweitern
Hi,
sagen wir ich habe eine Klasse:
Delphi-Quellcode:
und ich möchte diese Klasse zur Laufzeit um eine variable Anzahl an Eigenschaften erweitern, die aber vom User definiert werden können sollen. Würde das irgendwie gehen, oder ist das nicht möglich?
TTestklasse = Class(TObject)
Hesteller: String; Modell: String; Breite: integer; Hoehe: integer; end; |
AW: Klassen zur Laufzeit dynamisch erweitern
So, wie du es formulierst, geht es nicht. Die Eigenschaften einer Klasse müssen dem Compiler bekannt sein. Du kannst aber z.B. eine TStringList in die Klasse mit aufnehmen und die User-Daten in dxeren Name-Value-Pairs speichern. Es gibt aber sicher noch andere Herangehensweisen.
|
AW: Klassen zur Laufzeit dynamisch erweitern
Natürlich kann man per Hand die RTTI umschreiben, Speicheranweisungen anpassen uvm., aber sowas macht man nicht.
(ich weiß, gemanagete Programmiersprachen ala JavaScript, PHP oder eventuell C# können sowas)
Delphi-Quellcode:
property Werte[Name: string]: Variant read ... write ...;
|
AW: Klassen zur Laufzeit dynamisch erweitern
Zitat:
Man sollte erstmal klären, was mit diesen Eigenschaften und ihren Werten eigentlich alles passieren soll (Eingeben, Speichern, Laden, Ausgeben). So ist das Thema etwas sehr schwammig. |
AW: Klassen zur Laufzeit dynamisch erweitern
Kommt drauf an.
Wenn die Objekte per RTTI angesprochen werden, dann könnte man das schon verwenden. z.B. der TReader/TWriter der VCL geht ja nur via die RTTI auf Property los, welche in der DFM gespeichert sind. |
AW: Klassen zur Laufzeit dynamisch erweitern
Nein, sowas über RTTI will ich nicht machen.
Die an eine TSTringList war mir auch schon gekommen, und ich werde es auch so machen. Ich wollte nur mal fragen, ob es möglicherweise doch eine Möglichkeit gibt, von der ich nix weiß. Dank für eure Antworten. |
AW: Klassen zur Laufzeit dynamisch erweitern
Hallo,
die Frage was du damit machen willst ist durchaus berechtigt. Eventuell könnte auch eine Objektliste und eine Reihe von "Eigenschaften-Objekten" dich weiter bringen. Wenn die einzelnen Eigenschaften mehr können sollen als eine Stringrepräsentation ihres Wertes zu speichern ... LG, Daniel |
AW: Klassen zur Laufzeit dynamisch erweitern
Zitat:
![]()
Delphi-Quellcode:
meine ich).
myObject.MyProperty
Mit ![]() |
AW: Klassen zur Laufzeit dynamisch erweitern
Es gibt aber auch noch
![]() |
AW: Klassen zur Laufzeit dynamisch erweitern
Nur mal so: Jedes TDataset implementiert dieses Verhalten (zur Laufzeit dynamisch erweiterbare Eigenschaften).
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 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 by Thomas Breitkreuz