delphi rtti reflection
https://docwiki.embarcadero.com/RADStudio/Sydney/en/Delphi_RTTI_and_C%2B%2BBuilder
https://csvelocity.wordpress.com/2020/01/08/delphi-rtti-and-the-linker/
http://theclub.com.br/restrito/revistas/201005/rtti1005.aspx
https://docwiki.embarcadero.com/RADStudio/Alexandria/en/LiveBindings_in_RAD_Studio
https://stackoverflow.com/questions/24559016/delphi-use-reflection-in-a-class-procedure-for-the-getting-dynamic-class-type
TRttiContext(Record) TRttiType TRttiMethod
TRttiField TRttiProperty
uses
Sysutils,Classes,Variants,Math;
procedure TForm1.Reflection(obj: TObject);
var
Context:TRttiContext;
objType:TRttiType;
objField:TRttiField;
objProperty:TRttiProperty;
objMethod:TRttiMethod;
begin
Memo1.Lines.Clear;
objType:=Context.GetType(obj.ClassType);
//Listando os Campos do objeto
Memo1.Lines.Add('Campos:');
for objField in objType.GetFields do
begin
Memo1.Lines.Add(objField.Name+' Tipo: '+objField.FieldType.ToString+' Valor: '+objField.GetValue(obj).ToString);
end;
// Listando as propriedades do objeto
Memo1.Lines.Add('');
Memo1.Lines.Add('Propriedades:');
for objProperty in objType.GetProperties do
begin
Memo1.Lines.Add(objProperty.Name+'Tipo:'+objProperty.PropertyType.ToString+ ‘Valor: '+objProperty.GetValue(obj).ToString);
end;
// Listando os métodos do objeto
Memo1.Lines.Add('');
Memo1.Lines.Add('Métodos:');
for objMethod in objType.GetMethods do
begin
if not(objMethod.Name<>'GetImc')then // Buscamos apenas por esse método
Memo1.Lines.Add(objMethod.Name);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
objPessoa:Tpessoa;
begin
objPessoa:=Tpessoa.Create;
objPessoa.Nome:=EDTNOME.Text;
objPessoa.Peso:=StrToInt(EDTPESO.Text);
objPessoa.Altura:=StrToInt(EDTALTURA.Text);
objPessoa.Idade:=StrToInt(EDTIDADE.Text);
objPessoa.GetImc;
Reflection(objPessoa);
end;
沒有留言:
張貼留言