![]() |
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).
|
AW: Klassen zur Laufzeit dynamisch erweitern
Zitat:
![]() ![]() |
AW: Klassen zur Laufzeit dynamisch erweitern
In PHP5 kann man z.B. Property im Code verwenden, welche es garnicht gibt. (das wird dann über die Methoden _get und _set behandelt)
In Delphi kann man soein Verhalten auch verwenden, wenn man seine Objekte in einem OleVariant verpackt, aber leider gibt es dort dann keine Autovervolständigung im Codeeditor. |
AW: Klassen zur Laufzeit dynamisch erweitern
Ich glaube, wir kommen von dem eigentlichen Thema etwas ab. Wenn ich das richtig sehe, ist es der Endanwender, der diese zusätzlichen Eigenschaften definiert. Demnach kann der Entwickler diese nicht kennen und sie können im Source-Code gar nicht vorkommen - es sei denn, man vereinbart schon mal die Namen (aber dann könnte man sie auch gleich implementieren). Daher braucht man auch kein Verfahren, wie der Compiler mit ihnen umgehen kann.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 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