Nachdem ich mir Attribute nun auch etwas näher angesehen habe, stört mich eins doch irgendwie gewaltig: Vielleicht habe ich nicht lange genug im Wasser der AOP gebadet, aber spontan weiß ich nur einen Weg, an die Attribute zu kommen:
Mittels
RTTI über
GetAttributes(): TArray<TCustomAttribute>
auf einem
TRttiObject
. Nehmen wir an, ich habe eine ganz normale Property
Derp
eines Objekts und möchte nun schauen, ob ein Attribut "Lebensmittel" für diese Property existiert bzw. ob dieses Attribut sagt "Wurst" oder "Käse". Jetzt muss ich über alle Properties meines Objekts iterieren, bis ich eine finde, welche den Namen 'Derp' hat. Nachdem ich die Property nun habe, kann ich wiederum alle Attribute durchsuchen, nach Namen suchen und weitermachen.
Das Durch-Iterieren stört mich nicht. Aber dass ich nicht Dinge tun kann wie
meinObjekt.Derp.GetAttributes()
sondern doch hier eigentlich aufgrund der
RTTI gezwungen bin, mit Zeichenfolgen zu arbeiten, oder? Soll bedeuten, ich muss in meinem Quelltext mindestens einen String mit dem Inhalt 'Derp' und 'Lebensmittel' ablegen. Ändere ich nun den Namen der Property und/oder des Attributs, habe ich ein Problem: Die Strings passen nicht mehr. Denn ich kenne keinen Weg, einer Methode eine "Property an sich" übergeben zu können. Attribute schon, das sind ja normale Klassen. Aber bei Properties scheitert es hier irgendwie...