Ver Mensaje Individual
  #5  
Antiguo 02-06-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Reputación: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Aunque es un tema que daría para mucho, aquí te pongo un sencillísimo ejemplo basado en los que aparecen en el libro Visual C# de Francisco Charte:

Código:
/*
 * Basado en ejemplos del libro Visual C# de Francisco,
 * Charte, concretamente, los del capítulo titulado
 * Recuperación de información de tipos en tiempo de
 * ejecución.
 * 
 */

using System;
using System.Reflection;

namespace Consola.Pruebas
{
  class Program
  {
    static void Main(string[] args)
    {
      /* Obtenemos una referencia a este ensamblado, pero, nótese
         que podríamos obtener la referencia de cualquier otro
      */
      Assembly ensamblado = Assembly.GetExecutingAssembly();

      /* Obtenemos el tipo de la clase "Prueba", a traves de su
         nombre completo, que, como puede verse, incluye el ensam-
         blado en donde se encuentra dicha clase Pruebas.
      */
      Type ClasePrueba = ensamblado.GetType("Consola.Pruebas.Prueba");

      // Si efectivamente tenemos el tipo de la clase...
      if (ClasePrueba != null)
      {
        /* Creamos una instancia de la clase, pero, nótese que lo
           obtendremos será la instancia de un "objeto", pero no po-
           dremos trabajar con él como si fuera directamente instan-
           ciado "como suele ser habitual".
        */  
        Object ObjetoPrueba = Activator.CreateInstance(ClasePrueba);

        // Esta sería una forma de invocar a un método del objeto
        (ObjetoPrueba as Prueba).Saludos();

        // Esta sería otra, nótese que aquí "no conocemos" la clase Prueba
        MethodInfo MetodoSaludos = ClasePrueba.GetMethod("Saludos");
        MetodoSaludos.Invoke(ObjetoPrueba, null);
      }

      Console.ReadLine();
    }
  }
  
  // Clase para las pruebas anteriores
  class Prueba
  {
    public Prueba()
    {
      Console.WriteLine("Constructor de la clase Prueba");
    }

    public void Saludos()
    {
      Console.WriteLine("Método Saludos de la clase Prueba");
    }
  }

} // class Program
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-06-2006 a las 17:49:36.
Responder Con Cita