Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Klassen zur Laufzeit dynamisch erweitern (https://www.delphipraxis.net/171032-klassen-zur-laufzeit-dynamisch-erweitern.html)

Captnemo 16. Okt 2012 12:37

Klassen zur Laufzeit dynamisch erweitern
 
Hi,

sagen wir ich habe eine Klasse:
Delphi-Quellcode:
TTestklasse = Class(TObject)
  Hesteller: String;
  Modell: String;
  Breite: integer;
  Hoehe: integer;
end;
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?

Uwe Raabe 16. Okt 2012 12:52

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.

himitsu 16. Okt 2012 13:19

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 ...;

Uwe Raabe 16. Okt 2012 13:27

AW: Klassen zur Laufzeit dynamisch erweitern
 
Zitat:

Zitat von himitsu (Beitrag 1187262)
Natürlich kann man per Hand die RTTI umschreiben, Speicheranweisungen anpassen uvm., aber sowas macht man nicht.

Macht m.E. auch keinen Sinn. Da die Eigenschaften beim Compilieren nicht bekannt sind, können sie im Source-Code auch nicht vorkommen.

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.

himitsu 16. Okt 2012 13:37

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.

Captnemo 17. Okt 2012 08:54

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.

DanielJ 17. Okt 2012 09:53

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

Stevie 17. Okt 2012 13:58

AW: Klassen zur Laufzeit dynamisch erweitern
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1187263)
Zitat:

Zitat von himitsu (Beitrag 1187262)
Natürlich kann man per Hand die RTTI umschreiben, Speicheranweisungen anpassen uvm., aber sowas macht man nicht.

Macht m.E. auch keinen Sinn. Da die Eigenschaften beim Compilieren nicht bekannt sind, können sie im Source-Code auch nicht vorkommen.

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.

In .Net (genauer gesagt WPF) gibt es die sogenannten Dependency Properties. Sowas kann durchaus Sinn machen, auch wenn man nicht direkt im Sourcecode darauf zugreifen kann (im direkten Sinn von
Delphi-Quellcode:
myObject.MyProperty
meine ich).

Mit meiner abgespeckten Delphi Implementierung davon kann man durchaus Klassen mit Eigenschaften erweitern (intern über RTTI Erweiterungen).

Sir Rufo 17. Okt 2012 14:36

AW: Klassen zur Laufzeit dynamisch erweitern
 
Es gibt aber auch noch Custom Variant Type (Beispiel TDataSet)

Furtbichler 17. Okt 2012 18:59

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 08:10 Uhr.
Seite 1 von 2  1 2      

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