TOC

This article has been localized into Portuguese by the community.

Reflection:

O tipo certo

A classe Type é a base do Reflection. Ele serve como informação de tempo de execução sobre uma montagem, um módulo ou um tipo. Felizmente, obter uma referência ao Tipo de um objeto é muito simples, já que toda classe que herda da classe Object possui um método GetType(). Se você precisar de informações sobre um tipo não instanciado, poderá usar o método typeof() globalmente disponível, que fará exatamente isso. Considere os exemplos a seguir, nos quais usamos as duas abordagens:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string test = "test";
            Console.WriteLine(test.GetType().FullName);
            Console.WriteLine(typeof(Int32).FullName);
            Console.ReadKey();
        }
    }
}

Usamos o método GetType() em nossa própria variável e usamos o typeof() em uma classe conhecida, a Int32. Como você pode ver, o resultado em ambos os casos é um objeto Type, para o qual podemos ler a propriedade FullName.

Em algum momento, você pode até ter apenas o nome do tipo que está procurando. Nesse caso, você terá que obter uma referência para ele da montagem adequada. No próximo exemplo, obtemos uma referência ao assembly em execução, ou seja, o assembly de onde o código atual está sendo executado e listamos todos os seus tipos:

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace ReflectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Assembly assembly = Assembly.GetExecutingAssembly();
            Type[] assemblyTypes = assembly.GetTypes();
            foreach(Type t in assemblyTypes)
                Console.WriteLine(t.Name);
            Console.ReadKey();
        }
    }

    class DummyClass
    {
        //Just here to make the output a tad less boring :)
    }
}

A saída será o nome das duas classes declaradas, Program e DummyClass, mas em um aplicativo mais complexo, a lista provavelmente seria mais interessante. Nesse caso, só obtemos o nome do tipo, mas obviamente poderíamos fazer muito mais com a referência Type que obtemos. Nos próximos capítulos, mostrarei um pouco mais sobre o que podemos fazer com isso.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!