Advertisement
elGuille

usar Activator con dynamic

Jan 6th, 2013
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.88 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. // OJO para usar "dynamic" hay que tener una referencia a Microsof.CSharp
  6.  
  7.  
  8. namespace ActivatorCS
  9. {
  10.     public sealed class CrearClase2
  11.     {
  12.         public static void prueba()
  13.         {
  14.  
  15.             // La clase a crear
  16.             var elNombre = "ActivatorCS.Colega";
  17.  
  18.             crearClase(elNombre);
  19.  
  20.             // Esta clase se llama igual,
  21.             // pero no es del mismo tipo
  22.             // y no pasaría la prueba de IsAssignableFrom,
  23.             // aunque no daría error al hacer la conversión
  24.             // pero no crearía una instancia,
  25.             // por tanto Activator devolvería nulo,
  26.             // en realidad el valor nulo lo devuelve
  27.             // la operación de conversión de tipos
  28.             // por eso en VB utilizo TryCast en lugar
  29.             // de DirectCast o CType
  30.             elNombre = "OtroEspacio.Colega";
  31.             crearClase(elNombre);
  32.  
  33.             // esta clase se basa en la que queremos crear
  34.             // aunque esté en otro espacio de nombres
  35.             elNombre = "OtroEspacio.Coleguilla";
  36.             crearClase(elNombre);
  37.  
  38.             //' Esta no tiene constructor
  39.             //elNombre = "OtroEspacio.Coleguilla2"
  40.             //crearColega(elNombre)
  41.  
  42.  
  43.             // este tipo no existe,
  44.             // pero debemos usar IsAssignableFrom
  45.             // para no provocar una excepción
  46.             elNombre = "Activator.Colega";
  47.             crearClase(elNombre);
  48.  
  49.             // esta se basa en la nuestra
  50.             // pero es abstracta (no tiene constructor)
  51.             // ya dará un error al crearla
  52.             // aunque pasaría la prueba de IsAssignableFrom
  53.             elNombre = "ActivatorCS.ColegaAbstracto";
  54.             crearClase(elNombre);
  55.  
  56.  
  57.         }
  58.  
  59.         private static void crearClase(string laClase)
  60.         {
  61.             var todoBien = true;
  62.             dynamic obj = null;
  63.  
  64.             Type elTipo = Type.GetType(laClase);
  65.             try
  66.             {
  67.                 obj = Activator.CreateInstance(elTipo);
  68.  
  69.                 if (obj != null)
  70.                 {
  71.                     obj.Nombre = "Pepe";
  72.                     obj.Email = "pepe@outlook.com";
  73.  
  74.                     Console.WriteLine("Objeto creado correctamente: {0}{1}{2}, {3}",
  75.                                       obj.GetType().Name, "\r\n",
  76.                                       obj.Nombre, obj.Email);
  77.                 }
  78.  
  79.             }
  80.             catch (Exception ex)
  81.             {
  82.                 Console.WriteLine("ERROR: " + ex.Message);
  83.                 todoBien = false;
  84.             }
  85.  
  86.             if (!todoBien)
  87.             {
  88.                 Console.WriteLine("Parece que el tipo: {0} no es del tipo adecuado.",
  89.                                   laClase);
  90.             }
  91.  
  92.             Console.WriteLine();
  93.         }
  94.  
  95.     }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement