Obtener un tipo de una clase

03/11/2006 - 15:46 por Jordi Julià | Informe spam
Hola,

Necesito saber porque en las siguientes instrucciones la variable Resultado
queda a Nothing.

Dim c2 As New Class_2
Dim Resultado As Type = Type.GetType(c2.GetType().ToString)


Esto en VB2003 funciona (genera un objeto System.RuntimeType) pero en VB2005
no (queda a Nothing),
sabría alguien decirme el proque?

Saludos
Gracias

Jordi

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MVP]
05/11/2006 - 15:43 | Informe spam
Dim c2 As New Class_2
Dim Resultado As Type = Type.GetType(c2.GetType().ToString)



No entiendo mucho la idea de hacer eso porque c2.GetType() ya te
devuelve un objeto Type. Lo que podrías hacer es

Dim Resultado As Type = Type.GetType(c2.GetType().FullName)

Eduardo A. Morcillo [MVP VB]
http://www.mvps.org/emorcillo/
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#2 Jordi Julià
06/11/2006 - 09:59 | Informe spam
Hola,

Realmente esto no es lo que quiero hacer, lo que quiero es crear una
instancia de una clase incluida en el proyecto en tiempo de ejecución, para
poder derivar hacia ella los eventos que se produzcan en una una página
genérica (donde se cargan los controles en tiempo de ejecución).

El problema que tengo, es que no puedo conseguir en VB2005 el tipo de una
clase incluida en el proyecto, sabiendo sólo de ella el nombre (que esta
registrado en una tabla de la base de datos).

La función real en VB2003 es la siguiente (y con VB2003 funciona
correctamente):

'Establecer una nueva instancia a la clase asociada a la página
Private Function Establecer_ClaseAsociada_Pagina()

ClaseAsociada = Nothing
Dim Usuario As String = Session.Item("Usuario")
Dim Ensamblado As Type

Dim NombreProyecto As String = ""
Dim NombreClase As String = ""
Dim Params(7) As Object

'Obtener los datos de configuración a nivel de página
Dim fila As DataRow
Dim Vista As New
DataView(ds_Pagina.Tables("sysEstructuraWeb_Paginas"))
If Vista.Count > 0 Then
fila = Vista(0).Row

'Obtener el nombe de la clase particular asociada a esa página
NombreClase = Trim(fila.Item("Pagina_Clase_Asociada"))
If NombreClase <> "" Then

'Determinar los parámetros del contructor de la clase a
crear instancia
Params(0) = Compañia
Params(1) = Entorno
Params(2) = Idioma
Params(3) = Usuario.Trim
Params(4) = connLit_SQL
Params(5) = connLit_OLEDB
Params(6) = ds_Pagina
Params(7) = ClaseVirtual

'Crear la instancia de clase de manera dinámica
NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name
Ensamblado = Type.GetType(NombreProyecto & Chr(46) &
NombreClase)
ClaseAsociada = Activator.CreateInstance(Ensamblado, Params)

End If
End If

End Function

En VB2005 la variable "Ensamblado" queda a Nothing, también tengo que decir
que la variable NombreProyecto no se obtiene correctamente utilizando el
System.Reflection, pero lo he probado poniendo el nombre del Proyecto o del
Espacio de nombres raiz (que es el mismo) y tampoco funcionaba.

Saludos y muchas gracias por el interés.

Jordi



"Eduardo A. Morcillo [MVP]" <"emorcillo["@]mvps.org> escribió en el mensaje
news:
Dim c2 As New Class_2
Dim Resultado As Type = Type.GetType(c2.GetType().ToString)



No entiendo mucho la idea de hacer eso porque c2.GetType() ya te
devuelve un objeto Type. Lo que podrías hacer es

Dim Resultado As Type = Type.GetType(c2.GetType().FullName)

Eduardo A. Morcillo [MVP VB]
http://www.mvps.org/emorcillo/
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#3 Eduardo A. Morcillo [MVP]
06/11/2006 - 13:01 | Informe spam
Era en web, algo que no habías aclarado. A diferencia del VB2003 el 2005
no crea una sola DLL para toda la aplicacion web y el error es asumir
que System.Reflection.Assembly.GetExecutingAssembly.GetName.Name es el
namespace de la clase.

Eduardo A. Morcillo [MVP VB]
http://www.mvps.org/emorcillo/
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#4 Jordi Julià
07/11/2006 - 11:15 | Informe spam
Hola,

Gracias de antemano por ayudarme,

El proyecto es un ciertamente un WebForms, lamento la omisión.

He observado que en la conversión de las clases que quiero instanciar me ha
creado un Namespace que en VB2003 no estaba, por ejemplo:


Namespace GLOBALservicesNET

Public Class Mantenimiento

...

End Class

End Namespace



Entiendo que para crear una instancia de esta clase debería hacerlo:

Dim Ensamblado As Type = Type.GetType("GLOBALservicesNET.Mantenimiento")
Dim ClaseAsociada As Object = Activator.CreateInstance(Ensamblado, Params)

Pero sigue quedando la variable "Ensamblado" a nothing

Si se te ocurre alguna cosa te lo agredecería porque es el único problema
que tengo para pasarme a VB2005.

Gracias
Jordi
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida