Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- // OJO para usar "dynamic" hay que tener una referencia a Microsof.CSharp
- // http://www.elguillemola.com/index.php/2013/01/si-utilizas-dynamic-en-csharp-acuerdate-de-agregar-una-referencia-a-microsoft-csharp/
- // si quieres saber cómo hacer esto mismo en VB:
- // http://pastebin.com/NEAas23n
- namespace ActivatorCS
- {
- public sealed class CrearClase2
- {
- public static void prueba()
- {
- // La clase a crear
- var elNombre = "ActivatorCS.Colega";
- crearClase(elNombre);
- // Esta clase se llama igual,
- // pero no es del mismo tipo
- // y no pasaría la prueba de IsAssignableFrom,
- // aunque no daría error al hacer la conversión
- // pero no crearía una instancia,
- // por tanto Activator devolvería nulo,
- // en realidad el valor nulo lo devuelve
- // la operación de conversión de tipos
- // por eso en VB utilizo TryCast en lugar
- // de DirectCast o CType
- elNombre = "OtroEspacio.Colega";
- crearClase(elNombre);
- // esta clase se basa en la que queremos crear
- // aunque esté en otro espacio de nombres
- elNombre = "OtroEspacio.Coleguilla";
- crearClase(elNombre);
- //' Esta no tiene constructor
- //elNombre = "OtroEspacio.Coleguilla2"
- //crearColega(elNombre)
- // este tipo no existe,
- // pero debemos usar IsAssignableFrom
- // para no provocar una excepción
- elNombre = "Activator.Colega";
- crearClase(elNombre);
- // esta se basa en la nuestra
- // pero es abstracta (no tiene constructor)
- // ya dará un error al crearla
- // aunque pasaría la prueba de IsAssignableFrom
- elNombre = "ActivatorCS.ColegaAbstracto";
- crearClase(elNombre);
- }
- private static void crearClase(string laClase)
- {
- var todoBien = true;
- dynamic obj = null;
- Type elTipo = Type.GetType(laClase);
- try
- {
- obj = Activator.CreateInstance(elTipo);
- if (obj != null)
- {
- obj.Nombre = "Pepe";
- obj.Email = "pepe@outlook.com";
- Console.WriteLine("Objeto creado correctamente: {0}{1}{2}, {3}",
- obj.GetType().Name, "\r\n",
- obj.Nombre, obj.Email);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine("ERROR: " + ex.Message);
- todoBien = false;
- }
- if (!todoBien)
- {
- Console.WriteLine("Parece que el tipo: {0} no es del tipo adecuado.",
- laClase);
- }
- Console.WriteLine();
- }
- }
- }
Add Comment
Please, Sign In to add comment