This article is currently in the process of being translated into Spanish (~98% done).
The right Type
La clase Type es la base de la Reflexión. Esta entrega información acerca de un ensamblado un módulo o un tipo en tiempo de ejecución. Afortunadamente, obtener una referencia al Type de un objeto es muy simple, ya que cada clase que se hereda de la clase Object, tiene un método GetType(). Si tú necesitas información acerca de un tipo no instanciado, puedes usar el método globalmente disponible typeof(), el cual hará justamente eso. Considera los siguientes ejemplos, donde usamos ambos enfoques:
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 el método GetType() sobre nuestra propia variable, y luego usamos el typeof() en una clase conocida, el Int32. Como puedes ver, el resultado en ambos casos es un objeto Type, del cual podemos leer la propiedad FullName.
En algún punto, podrías incluso tener solo el nombre del tipo que buscas. En ese caso, tendrás que tener una referencia a este desde el ensamblado correspondiente. En el siguiente ejemplo, obtenemos una referencia al ensamblado en ejecución, esto es, el ensamblado desde el cual el código está siendo ejecutado, y luego listamos todos sus 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 :)
}
}
La salida será el nombre de dos de las clases declaradas, Program y DummyClass, pero en una situación más compleja, el listado probablemente sería más interesante. En este caso, solo obtenemos el nombre del tipo, pero obviamente podríamos hacer mucho más, con la referencia al Type que obtenemos. En los siguientes capítulos, Les voy a mostrar un poco más sobre lo que podemos hacer con esta.