|
Usuários |
|
74 Usuários Online
|
|
[Artigos]
Conhecendo um pouco da RTTI – Parte IV |
Publicado por rboaro : Quarta, Janeiro 09, 2013 - 09:16 GMT-3 (401 leituras)
comentar Enviar para um amigo Versão para impressão
|
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 pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos. |
|
|
Edição 112 |
|
|
50 Programas Fontes |
|
|
Produtos |
|
|