Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Referenz auf Recordtyp, wie TClass für Klassen

  Alt 8. Mär 2010, 08:33
Hallo zusammen,

ich habe im Moment das Problem, dass ich via RTTI eine Property setzen will, welche in Record ist. Nun sollte ich ja nach Möglichkeit wissen, um welchen Record es sich denn überhaupt handelt. Es gibt bei mir drei Stück: RString, RInteger und RFloat. Hier vorab ein wenig Code:
Delphi-Quellcode:
var
  context : TRttiContext;
  typeInfo : TRttiType;
  prop : TRttiProperty;
  recordName : String
begin
  context := TRttiContext.Create();
  typeInfo := context.GetType(obj.ClassType);

  prop := typeInfo.GetProperty('RecordVar');
  recordName := prop.PropertyType.Name); // Liefert z.B. 'RString'

  if (recordName = 'RString') then
    ShowMessage('Juhu')
  else
    ShowMessage('Nicht gut.');
end;
Wie ihr seht ist es ja an sich nicht so schwer an den Name des Records in Form eines Strings zu gelangen und darauf zu reagieren. Was passiert aber, wenn ich RString in RUnicodeString abändere? Dann kommt auf einmal nicht mehr "Juhu" als Meldung, sondern "Nicht gut.". Bei Klassen ist das ja an sich kein Problem, da man hier nicht mit den Namen der Klassen, also als String, sondern mit TClass hantieren würde. Via Refactoring wären Änderungen auch auch schnell passiert.

Aber wie soll man dieses Problem denn sinnvoll mit Records lösen? Ich habe bisher nur die Variante über den String gefunden, welche aber nicht wirklich zufriedenstellend ist! Gibt es ein ähnliches Konstrukt wie TClass für Klassen, nur halt für Records?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat