terça-feira, 1 de abril de 2008

Atribuição dinâmica de valor em atributos usando reflection

Estamos criando uma classe responsável por carregar os campos de um arquive de lote. Para cada atributo desta classe desejamos atribuir um campo do arquivo. Como é muito trabalhoso criar, uma a uma, as atribuições de um layout de mais de 80 campos uptamos por usar reflection.

Segue um exemplo simplificado da solução que adotamos:

class Teste
{
public int attrib1 = 0;
public string attrib2 = null;
}

class Program
{
static void Main(string[] args)
{
Teste teste = new Teste();

FieldInfo fiAttrib1 = teste.GetType().GetField("attrib1");
fiAttrib1.SetValue(teste, 0);

FieldInfo fiAttrib2 = teste.GetType().GetField("attrib2");
fiAttrib2.SetValue(teste, "abc");

Console.WriteLine("Attrib1: {0}\nAttrib2: {1}", teste.attrib1, teste.attrib2);
}
}


Na pratica os campos do arquivo são lidos de um arquivo de configuração. Ainda, como os atributos da classe são privados se faz necessário passar BindingFlags.Instance BindingFlags.NonPublic como parametro do método GetField

Nenhum comentário: