Escrito em April 27th, 2009 as 12:00 am por Guilherme Bacellar

0 Comentários

As Propriedades são os assessores diretos dos Fields (Campos) e expõem os “valores” de um objeto.

Para este post, será necessário a utilização da classe (Usuario) descrita no post (Reflection Parte 2 – Construtores)

Pensemos em nosso objeto de Usuário, ele tem alguns atributos (Propriedades) tais como: Nome, Idade e Data do Nascimento

Recuperando todas as Propriedades

C#

// Cria Objetos
Type meuTipo;
PropertyInfo[] properties;

// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);

// Recupera Todas as Propriedades
properties = meuTipo.GetProperties();

VB.Net

' Cria Objetos
Dim meuTipo As Type
Dim properties As PropertyInfo()

' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)

' Recupera Todas as Propriedades
properties = meuTipo.GetProperties()

Recuperando uma (01) Propriedade Específica

C#

// Cria Objetos
Type meuTipo;
PropertyInfo nameProperty;
PropertyInfo idadeProperty;

// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);

// Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome");
idadeProperty = meuTipo.GetProperty("Idade");

VB.Net

' Cria Objetos
Dim meuTipo As Type
Dim nameProperty As PropertyInfo
Dim idadeProperty As PropertyInfo

' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)

' Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome")
idadeProperty = meuTipo.GetProperty("Idade")

Alterando o Valor de uma Propriedade

Para alterar o valor de uma Propriedade utilizaremos o método (SetValue) do Tipo que contém 2 parâmetros:

  1. A instância do objeto que queremos alterar o valor da Propriedade;
  2. O novo valor da Propriedade;

C#

// Cria Objetos
Type meuTipo;
PropertyInfo nameProperty;
PropertyInfo idadeProperty;
Usuario novoUsuario = new Usuario();

// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);

// Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome");
idadeProperty = meuTipo.GetProperty("Idade");

// Altera o Nome e a Idade do Usuário
nameProperty.SetValue(novoUsuario, "Guilherme Bacellar Moralez", null);
idadeProperty.SetValue(novoUsuario, 25, null);

VB.Net

' Cria Objetos
Dim meuTipo As Type
Dim nameProperty As PropertyInfo
Dim idadeProperty As PropertyInfo
Dim novoUsuario As New Usuario()

' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)

' Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome")
idadeProperty = meuTipo.GetProperty("Idade")

' Altera o Nome e a Idade do Usuário
nameProperty.SetValue(novoUsuario, "Guilherme Bacellar Moralez", Nothing)
idadeProperty.SetValue(novoUsuario, 25, Nothing)

Note que após a execução do método (SetValue) a Propriedade do objeto Usuario conterá a string “Guilherme Bacellar Moralez” para o Nome e “25” para a Idade.

Recuperando o Valor de uma Propriedade

Igualmente podemos recuperar o valor da Propriedade com o método (GetValue) que recebe apenas um único parâmetro:

  1. A Instância do Objeto que contém a Propriedade que se deseja recuperar

C#

// Cria Objetos
Type meuTipo;
PropertyInfo nameProperty;
PropertyInfo idadeProperty;
Usuario novoUsuario = new Usuario();
string nomeDoUsuario;
int idadeDoUsuario;

// Recupera o Tipo Desejado
meuTipo = typeof(Usuario);

// Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome");
idadeProperty = meuTipo.GetProperty("Idade");

// Altera o Nome e a Idade do Usuário
nameProperty.SetValue(novoUsuario, "Guilherme Bacellar Moralez", null);
idadeProperty.SetValue(novoUsuario, 25, null);

// Recupera os Valores
nomeDoUsuario = (string) nameProperty.GetValue(novoUsuario, null);
idadeDoUsuario = (int) idadeProperty.GetValue(novoUsuario, null);

VB.Net

' Cria Objetos
Dim meuTipo As Type
Dim nameProperty As PropertyInfo
Dim idadeProperty As PropertyInfo
Dim novoUsuario As New Usuario()
Dim nomeDoUsuario As String
Dim idadeDoUsuario As Integer

' Recupera o Tipo Desejado
meuTipo = GetType(Usuario)

' Recupera Todas as Propriedades
nameProperty = meuTipo.GetProperty("Nome")
idadeProperty = meuTipo.GetProperty("Idade")

' Altera o Nome e a Idade do Usuário
nameProperty.SetValue(novoUsuario, "Guilherme Bacellar Moralez", Nothing)
idadeProperty.SetValue(novoUsuario, 25, Nothing)

' Recupera os Valores
nomeDoUsuario = CStr(nameProperty.GetValue(novoUsuario, Nothing))
idadeDoUsuario = CInt(idadeProperty.GetValue(novoUsuario, Nothing))

Observe que o método (GetValue) retorna sempre o conteúdo da Propriedade como um tipo Objeto, então, você sempre terá que realizar uma conversão (Cast) para o tipo da variável desejada (em nosso exemplo é String e Inteiro).

Se você estiver acompanhando a série de artigos sobre Reflexão desde o início irá estranhar que este artigo em específico é muito parecido com o de Fields (Campos), mas, é isso mesmo.

A forma de trabalho com eles até o momento é bem parecida, mas, iremos mostrar comportamentos mais adiante que as Propriedades e que os Fields (Campos) não tem.

Até o próximo!

Posts Relacionados:

  1. Reflection – Parte 5 (Interfaces)
  2. Reflection – Parte 3 (Fields)
  3. Reflection Parte 2 – Construtores
  4. Por Dentro das Propriedades Automáticas
  5. Introdução a Reflection
  6. Tipos Nulos (Nullable Value Types)
  7. Ordenação de Listas (Coleções)
, , ,

Be the first to start a conversation

Deixa uma Resposta

znjdb32s6g