Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 12 de Junho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
74 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Conhecendo um pouco da RTTI – Parte IV
Publicado por rboaro : Quarta, Janeiro 09, 2013 - 09:16 GMT-3 (401 leituras)
Comentários comentar   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Diego Garcia Continuando o estudo sobre a RTTI, vamos ver um pouco sobre o que consiste o TValue, que estamos utilizando desde a primeira parte do nosso estudo.
O TValue consiste em um estrutura de dados para diferentes tipos de dados e é largamente utilizada nas rotinas que envolvem a RTTI (como por exemplo armazenar informações sobre um campo de um objeto ou um parâmetro de um método). Com o TValue é possível não só armazenar um valor de qualquer tipo como também é possível armazenar as informações de uma instancia de uma variável de qualquer tipo, pode parecer confuso mas com o exemplo fica mais claro. Vamos criar um método que irá receber um valor qualquer, armazenar em um TValue e no final este método irá apresentar informações sobre esse valor.

procedure informacoesDoValorRTTI(const vValor: TValue;
slInformacoes: TStrings);
begin
with slInformacoes do
begin
Add('Valor: ' + vValor.ToString);
Add('Tipo: ' + GetEnumName(TypeInfo(TTypeKind),integer(vValor.Kind)));
add('É um Integer?: ' + ifthen(vValor.IsType<Integer>,'Sim','Não'));
end;
end;
Para executar a rotina acima vamos usar um formulário com um botão e um memo e faremos as chamadas da seguinte forma (já realizando o teste com dois tipos de dados distintos.)

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
s : string;
begin
Memo1.Lines.Add('Variável do tipo Integer');
i := 1910;
informacoesDoValorRTTI(i,Memo1.Lines);

Memo1.Lines.Add('');

Memo1.Lines.Add('Variável do tipo String');
s := 'Texto comum';
informacoesDoValorRTTI(s,Memo1.Lines);
end;
Após essa execução, nosso memo deverá ter o seguinte conteúdo:
Variável do tipo Integer
Valor: 1910
Tipo: tkInteger
É um Integer?: Sim

Variável do tipo String
Valor: Texto comum
Tipo: tkUString
É um Integer?: Não

Algo que acho interessante reparar é a forma como o cast de tipos é feito de forma implícita visto que o parâmetro vValor do nosso métodoinformacoesDoValorRTTI() aceitou tanto um dado do tipo integer como do tipo string. Outra coisa interessante é o uso de Generics no método IsType, que permite que essa verificação seja feita com qualquer classe.

Neste nosso exemplo foi possível recuperar o valor armazenado no TValue (através do casting ToString) e recuperar o tipo da nossa variável (tanto através da propriedade Kind como também através do método IsType), mas desde a primeira parte destes artigos sobre RTTI, ainda tem uma coisa que não foi abordada e que vale uma certa atenção, o uso de vetores nas rotinas da RTTI, sendo assim, já temos assunto para mais uma parte desse estudo. Caso tenha alguma duvida ou alguma sugestão, podem me enviar no twitter (@drgarcia1986). Até a próxima!


Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados