Advertisement
elGuille

usar Activator con Option Strict Off

Jan 6th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 2.88 KB | None | 0 0
  1. Option Strict Off
  2.  
  3. ' Si quieres saber cómo hacerlo con C# y dynamic:
  4. ' http://www.elguillemola.com/index.php/2013/01/si-utilizas-dynamic-en-csharp-acuerdate-de-agregar-una-referencia-a-microsoft-csharp/
  5.  
  6. Namespace ActivatorVB
  7.  
  8.     Public NotInheritable Class CrearClase2
  9.         Public Shared Sub Prueba()
  10.  
  11.             ' La clase a crear
  12.             Dim elNombre = "ActivatorVB.Colega"
  13.  
  14.             crearClase(elNombre)
  15.  
  16.             ' Esta clase se llama igual,
  17.             ' pero no es del mismo tipo
  18.             ' y no pasaría la prueba de IsAssignableFrom,
  19.             ' aunque no daría error al hacer la conversión
  20.             ' pero no crearía una instancia,
  21.             ' por tanto Activator devolvería nulo,
  22.             ' en realidad el valor nulo lo devuelve
  23.             ' la operación de conversión de tipos
  24.             ' por eso en VB utilizo TryCast en lugar
  25.             ' de DirectCast o CType
  26.             elNombre = "OtroEspacio.Colega"
  27.             crearClase(elNombre)
  28.  
  29.             ' esta clase se basa en la que queremos crear
  30.             ' aunque esté en otro espacio de nombres
  31.             elNombre = "OtroEspacio.Coleguilla"
  32.             crearClase(elNombre)
  33.  
  34.             '' Esta no tiene constructor
  35.             'elNombre = "OtroEspacio.Coleguilla2"
  36.             'crearColega(elNombre)
  37.  
  38.  
  39.             ' este tipo no existe,
  40.             ' pero debemos usar IsAssignableFrom
  41.             ' para no provocar una excepción
  42.             elNombre = "Activator.Colega"
  43.             crearClase(elNombre)
  44.  
  45.             ' esta se basa en la nuestra
  46.             ' pero es abstracta (no tiene constructor)
  47.             ' ya dará un error al crearla
  48.             ' aunque pasaría la prueba de IsAssignableFrom
  49.             elNombre = "ActivatorVB.ColegaAbstracto"
  50.             crearClase(elNombre)
  51.  
  52.  
  53.         End Sub
  54.  
  55.         Private Shared Sub crearClase(laClase As String)
  56.             Dim todoBien = True
  57.             Dim obj As Object = Nothing
  58.  
  59.             Dim elTipo As Type = Type.GetType(laClase)
  60.             Try
  61.                 obj = Activator.CreateInstance(elTipo)
  62.  
  63.                 If obj IsNot Nothing Then
  64.                     obj.Nombre = "Pepe"
  65.                     obj.Email = "pepe@outlook.com"
  66.  
  67.                     Console.WriteLine("Objeto creado correctamente: {0}{1}{2}, {3}",
  68.                                       obj.GetType().Name, vbCrLf,
  69.                                       obj.Nombre, obj.Email)
  70.                 End If
  71.  
  72.             Catch ex As Exception
  73.                 Console.WriteLine("ERROR: " & ex.Message)
  74.                 todoBien = False
  75.             End Try
  76.  
  77.             If Not todoBien Then
  78.                 Console.WriteLine("Parece que el tipo: {0} no es del tipo adecuado.",
  79.                                   laClase)
  80.             End If
  81.  
  82.             Console.WriteLine()
  83.         End Sub
  84.  
  85.     End Class
  86.  
  87. End Namespace
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement