delphi - sustancias - propiedades de la materia resumen
¿Cómo puedo distinguir las propiedades de TDateTime de las propiedades dobles con RTTI? (2)
Utilizando el sistema RTTI en Delphi 2010, ¿hay alguna manera de averiguar si una propiedad es un TDateTime? Actualmente lo estoy tratando como un doble cuando vuelvo a llamar como Variant y también si compruebo el tipo de propiedad. ¿Esto se debe al hecho de que solo puede ver el tipo base? (TDateTime = doble)
El punto clave aquí mientras se define el tipo es la directiva de tipo . Estas dos definiciones son diferentes:
Type
TDateTime = Double; // here p.PropertyType.Name returns Double
but
Type
TDateTime = type Double; // here p.PropertyType.Name returns TDateTime
or
Type
u8 = type Byte; // here p.PropertyType.Name returns u8
but
Type
u8 = Byte; // here p.PropertyType.Name returns Byte !
Intente verificar la propiedad Name
del TRttiProperty.PropertyType
No tengo Delphi 2010, pero esto funciona en XE.
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes,
Rtti;
type
TMyClass =class
private
FDate: TDateTime;
FProp: Integer;
FDate2: TDateTime;
FDate1: TDateTime;
public
property Date1 : TDateTime read FDate1 Write FDate1;
property Prop : Integer read FProp Write FProp;
property Date2 : TDateTime read FDate2 Write FDate2;
end;
var
ctx : TRttiContext;
t : TRttiType;
p : TRttiProperty;
begin
ctx := TRttiContext.Create;
try
t := ctx.GetType(TMyClass.ClassInfo);
for p in t.GetProperties do
if CompareText(''TDateTime'',p.PropertyType.Name)=0 then
Writeln(Format(''the property %s is %s'',[p.Name,p.PropertyType.Name]));
finally
ctx.Free;
end;
Readln;
end.
este código devuelve
the property Date1 is TDateTime
the property Date2 is TDateTime