Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eine Art Reflection (https://www.delphipraxis.net/87090-eine-art-reflection.html)

christo 23. Feb 2007 07:47


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

lowpass 23. Feb 2007 08:20

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:
MyObject.getObjectFromList('Objektname').Eigenschaft
Und innerhalb von MyObject eine Funktion:
Delphi-Quellcode:
function TMyObject.getObjectFromList(Objektname: String): TListObject;
begin
    // in Liste nach dem Objekt mit entsprechendem Namen suchen
    // Gefundenes Objekt casten und zurückgeben
end;
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.

Thorben_K 23. Feb 2007 09:56

Re: Eine Art Reflection
 
Das kannst du vll über eine property lössen

Delphi-Quellcode:

  TMyObj = class
  private

  MyList : TMyList;

  puplic

  property Items[Name : String] : TMyListObj read getItem write setItem;

  end;
Musst halt nur die Getter und setter methoden bebringen wie sie nach dem Objectnamen suchen können, und das gefunde dann rausgeben

christo 23. Feb 2007 14:02

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:
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
Ich denke der Haken ist der Count der Liste. Muesste vielleicht eher ueber for each in funktionieren, aber das kennt Delphi ja so nicht?

Gruss,
Chris


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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