Einzelnen Beitrag anzeigen

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

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

Re: Referenz auf Recordtyp, wie TClass für Klassen

  Alt 8. Mär 2010, 11:52
Habe gerade einen, imho unschönen, Workaround gefunden:
Delphi-Quellcode:
RString = record
private
  FValue : Variant;
  procedure SetValue(const AVar: Variant),
public
  const RecordName = 'RString'; // Name des Records; muss immer manuel angepasst werden :-/
  const VarType = varString;
  property Value : Variant read FValue write SetValue;
end;

// ---------------------------------
// Wenn ich das nun irgendwo verwende:
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.RecordName) then // Hier nun die Prüfung auf den passenden String
    ShowMessage('Juhu')
  else
    ShowMessage('Nicht gut.');
end;
Wenn ich nun RString ändern sollte, so bringt der Compiler einen Fehler, an der Stelle, an der ich dann RString.RecordName verwende. Das ist schon mal etwas besser, da ich dann den String nur einmal ändern muss. Aber so richtig zufrieden bin ich damit immer noch nicht.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat