Einzelnen Beitrag anzeigen

hschmid67

Registriert seit: 2. Jul 2012
Ort: Weilheim i. Obb.
71 Beiträge
 
Delphi 12 Athens
 
#2

AW: RTTI und generische Listen

  Alt 6. Nov 2020, 15:28
Nun habe ich doch noch eine Lösung für mein Problem gefunden.

Der Schlüssel dazu ist, dass man die Typenüberprüfung von Delphi ausschalten muss, da sonst ja ein TObject nicht einem Property vom Typ TSubClass zugewiesen werden kann. (nur anders herum und das hilft hier nicht weiter - und ok, die Typensicherheit ist ein großer Vorteil von Delphi, aber an dieser Stelle, wüsste ich damit nicht weiter)

Um die Tpyenüberprüfung "quasi auszuschalten" kann man den Umweg über TValue nehmen. Pseudocode sähe dann in etwa so aus:

Value := CreateObjectByClassname(QualifiedClassname);

Dabei kann dann im TValue jedes Objekt gespeichert werden.

Um das dann einem Objektproperty zuweisen zu können, braucht man eine Funktion

SetPropertyValue(Object, PropertyName, Value);


Und wenn man vorher sichergeht, dass der QualifiedClassname genau dem PropertyName entspricht, geht man wegen der Typsicherheit auch kein Risiko ein.

Wenn man dann noch eine TList<T> mit Werten füllen möchte, braucht man noch eine Methode

InvokeMethod(Liste, 'add', [Value.AsObject]);


Ich weiß nicht, ob meine Vereinfachung so jetzt wirklich verständlich ist. Ich habe doch einige Stunden daran herumgetüftelt - und vielleicht ist für mich jetzt alles klar, was aus diesen paar Zeilen nicht ganz klar wird. Jedenfalls wollte ich meine Lösung hier beschreiben, damit jemand, der vielleicht ein ähnliches Problem hat, auf die richtige Spur kommen kann - oder auch nochmal nachfrägt. Dann kann ich gerne noch ausführlicher werden, oder meine oben in PseudoCode gehaltenen Funktionen ausführen.

Viele Grüße
Harald
Harald Schmid
  Mit Zitat antworten Zitat