1) Interfaces
Im Grunde ist das ein klassischer Fall für Interfaces.
https://development.mwcs.de/tutinterfaces.html
http://www.delphipraxis.net/183702-i...-factorys.html
Allerdings verursacht das etwas Mehrarbeit und man muss überlegen, ob man sich auf die Referenzzählung einlassen will oder nicht.
Man muss sich auf jeden Fall damit auseinandersetzen, wann man mit dem Interface arbeitet und wann mit der Klasse.
2) Basisklasse
Evtl. ist es ja möglich, eine BasisklasseMitDerEigenschaft einzuführen, von der dann - nur diese beiden - Klassen abgeleitet werden.
Das wäre wohl der einfachste Fall. Scheint aber wohl hier nicht möglich zu sein.
3)
RTTI
Man könnte das vorliegende Objekt mit der
RTTI auch untersuchen, ob es die bestimmte Eigenschaft besitzt und diese Eigenschaft dann weiter benutzen (So ähnlich aObject.PropertyByName sozusagen.)
Das bringt auch einen gewissen Aufwand mit sich und ist ggf. nicht sehr performant.
4) casten
Wie im Ausgangspost angegeben.
Wenn das im Projekt nur an einigen Stellen und für wenige Klassen benötigt wird, ist das sicherlich (wenn 2) nicht geht) die einfachste Lösung.
Etwas Schreibarbeit verursachen alle Lösungen.
Das Casten der Objekte ist aber wohl die einfachste mit den geringsten Auswirkungen auf das Projekt.
(nebenbei: Auf das with würde ich dort verzichten und lokale Variablen einführen, da das m.E. übersichtlicher ist)