![]() |
Eigenschaften eines Objekts zur Laufzeit ergänzen
Hi,
gibt es die Möglichkeit einem Objekt zur Laufzeit eine Eigenschaft zuzuweisen? Nach dem Motto: Instanz.AddProperty(StringFürName, integer) |
Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
Ich glaube nicht, dass sowas geht.
Du könntest aber deinem Objekt eine TList oder TStrings als Eigenschaft geben und damit 'dynamische Eigenschaften' realisieren:
Delphi-Quellcode:
TMyObject = class...
public Properties: TStrings; MyObject.Properties.Add('MyProperty=MyValue'); if MyObject.Properties.IndexOfName('MyProperty')<>-1 then ShowMessage('MyProperty='+MyObject.Properties.Values['MyProperty']); |
Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
hmm hab ich schon gedacht,
ich hatte daran gedacht property: array of variant; könnte ich dann sagen if property[x] is integer then ... if property[y] is real then ... ? Kannst du denn bei deiner Variant nach 'MyProperty' suchen obwohl ja in der Liste 'MyProperty=MyValue' drinsteht, also praktisch nach einem Teilstring suchen (indexofname('MyProperty') ) |
Re: Eigenschaften eines Objekts zur Laufzeit ergänzen
Zitat:
Fügt ein String mit Namen 'MyProperty' und Wert 'MyValue' ein: MyObject.Properties.Add('MyProperty=MyValue'); Sucht nach dem Namen: MyObject.Properties.IndexOfName('MyProperty') Liefert den Wert vom String mit dem Namen 'MyProperty': MyObject.Properties.Values['MyProperty'] Mehr in der OH... Mit Array of Variant würde es auch gehen. Du könntest auch beides kombinieren:
Delphi-Quellcode:
Du musst nur GetProperty, SetProperty und AddProperty schreiben (was nicht allzu schwer sein dürfte) und hast dann Zugriff über MyObject.Properties['MyProperty'] auf die Werte der Eigenschaften
protected
FProperties: TStrings; FPropertyValues: array of variant; function GetProperty(Index: string): variant; procedure SetProperty(Index: string; Value: variant); public procedure AddProperty(Name: string; Value: Variant); property Properties[Index: String]: Variant read GetProperty write SetProperty; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:46 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