![]() |
Eine Art Reflection
Guten Morgen,
ich zerbreche mir gerade den Kopf ob folgendes moeglich waere: Ich habe ein Objekt, was wiederum eine Liste beinhaltet, die wiederum eine Basisklasse fuer weitere Objekte enthaelt. Nun moechte ich ueber Items auf die Objekt zugreifen und am liebsten waere mir folgende Syntax: MyObject.MyList("Objectname").Eigenschaft Das waere sehr komfortabel. Bisher habe ich aber nur folgendes: TObjectName(MyObject.MyList.Items[i]).Eigenschaft ...also eine "unschoenen" cast. Hat da vielleicht jemand eine Idee? Chris |
Re: Eine Art Reflection
Hallo Christo
Zwar bin ich Delphi-Neueinsteiger, aber vielleicht ist meine Idee trotzdem nicht völlig bescheuert: Wie wäre es, wenn Du in der Klasse von MyObject eine Methode definierst, die einen String annimmt und ein Objekt vom Typ der Listenelemente zurückgibt? Also im Sinne von:
Delphi-Quellcode:
Und innerhalb von MyObject eine Funktion:
MyObject.getObjectFromList('Objektname').Eigenschaft
Delphi-Quellcode:
Dann müsstest Du zwar 1 mal die Methode ausprogrammieren, wie man anhand des Objektnamens das passende Objekt aus der Liste holt, könntest aber im restlichen Code so zugreifen, wie Du das gerne möchtest.
function TMyObject.getObjectFromList(Objektname: String): TListObject;
begin // in Liste nach dem Objekt mit entsprechendem Namen suchen // Gefundenes Objekt casten und zurückgeben end; |
Re: Eine Art Reflection
Das kannst du vll über eine property lössen
Delphi-Quellcode:
Musst halt nur die Getter und setter methoden bebringen wie sie nach dem Objectnamen suchen können, und das gefunde dann rausgebenTMyObj = class private MyList : TMyList; puplic property Items[Name : String] : TMyListObj read getItem write setItem; end; |
Re: Eine Art Reflection
Hallo Zusammen,
vielen Dank fuer die Unterstuetzung. Allerdings komme ich mit den Hinweisen noch nicht weiter. Vielleicht nochmal mein Konstrukt...
Delphi-Quellcode:
Ich denke der Haken ist der Count der Liste. Muesste vielleicht eher ueber for each in funktionieren, aber das kennt Delphi ja so nicht?
TMyObjectBase = class(TObject)
public property Name: string; end; TMyObjectOne = class(TMyObjectBase) public property Color: string; end; TMyObjectTwo = class(TMyObjectBase) public property Position: string; end; TMyList public property Items[Index: integer] : TMyObjectBase; read GetItems write SetItems; end; ... for i := 0 to MyList.Count -1 do //cast TMyObcetTwo(MyList.Items[i])Positon //besser??? MyList('ObjectTwo').Position Gruss, Chris |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07: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