AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klassen zur Laufzeit dynamisch erweitern

Ein Thema von Captnemo · begonnen am 16. Okt 2012 · letzter Beitrag vom 18. Okt 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#1

Klassen zur Laufzeit dynamisch erweitern

  Alt 16. Okt 2012, 13:37
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?
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 16. Okt 2012, 13:52
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 16. Okt 2012, 14:19
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)

property Werte[Name: string]: Variant read ... write ...;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#4

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 16. Okt 2012, 14:27
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 16. Okt 2012, 14:37
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#6

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 17. Okt 2012, 09:54
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.
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
DanielJ

Registriert seit: 8. Sep 2008
Ort: Hamburg
35 Beiträge
 
Delphi XE Professional
 
#7

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 17. Okt 2012, 10:53
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
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 17. Okt 2012, 14:58
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 myObject.MyProperty meine ich).

Mit meiner abgespeckten Delphi Implementierung davon kann man durchaus Klassen mit Eigenschaften erweitern (intern über RTTI Erweiterungen).
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 17. Okt 2012, 15:36
Es gibt aber auch noch Custom Variant Type (Beispiel TDataSet)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#10

AW: Klassen zur Laufzeit dynamisch erweitern

  Alt 17. Okt 2012, 19:59
Nur mal so: Jedes TDataset implementiert dieses Verhalten (zur Laufzeit dynamisch erweiterbare Eigenschaften).
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:33 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