Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Strict Off
- ' Si quieres saber cómo hacerlo con C# y dynamic:
- ' http://www.elguillemola.com/index.php/2013/01/si-utilizas-dynamic-en-csharp-acuerdate-de-agregar-una-referencia-a-microsoft-csharp/
- Namespace ActivatorVB
- Public NotInheritable Class CrearClase2
- Public Shared Sub Prueba()
- ' La clase a crear
- Dim elNombre = "ActivatorVB.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 = "ActivatorVB.ColegaAbstracto"
- crearClase(elNombre)
- End Sub
- Private Shared Sub crearClase(laClase As String)
- Dim todoBien = True
- Dim obj As Object = Nothing
- Dim elTipo As Type = Type.GetType(laClase)
- Try
- obj = Activator.CreateInstance(elTipo)
- If obj IsNot Nothing Then
- obj.Nombre = "Pepe"
- obj.Email = "pepe@outlook.com"
- Console.WriteLine("Objeto creado correctamente: {0}{1}{2}, {3}",
- obj.GetType().Name, vbCrLf,
- obj.Nombre, obj.Email)
- End If
- Catch ex As Exception
- Console.WriteLine("ERROR: " & ex.Message)
- todoBien = False
- End Try
- If Not todoBien Then
- Console.WriteLine("Parece que el tipo: {0} no es del tipo adecuado.",
- laClase)
- End If
- Console.WriteLine()
- End Sub
- End Class
- End Namespace
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement