Instanciar una clase desde una variable en VB2005

25/07/2006 - 14:05 por Jordi Julià | Informe spam
Hola a todos,

Para crear una instancia de una clase que existe en un proyecto, lo haría
así:

dim cls as new Clase_Ejemplo

si el nombre de la clase estuviera en una variable y lo programo en VB2003,
lo haría así:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)


¿como lo debería programar para obtener el mismo objeto de clase pero en
VB2005?
tal cual no funciona -> Tipo=Nothing
el nombre del proyecto es correcto y el nombre de la clase que tiene la
variable también


Muchas gracias
Jordi

Preguntas similare

Leer las respuestas

#1 Jesús López
25/07/2006 - 15:44 | Informe spam
Prueba lo siguiente:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo
Proyecto_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)

Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:eE16UK%
Hola a todos,

Para crear una instancia de una clase que existe en un proyecto, lo haría
así:

dim cls as new Clase_Ejemplo

si el nombre de la clase estuviera en una variable y lo programo en
VB2003, lo haría así:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)


¿como lo debería programar para obtener el mismo objeto de clase pero en
VB2005?
tal cual no funciona -> Tipo=Nothing
el nombre del proyecto es correcto y el nombre de la clase que tiene la
variable también


Muchas gracias
Jordi


Respuesta Responder a este mensaje
#2 Jordi Julià
28/07/2006 - 09:10 | Informe spam
He hecho la prueba y sigue sin funcionar

No entiendo lo que me proponías, tenía entendido que el nombre completo de
una clase era: Espacio de nombres de la raiz + Nombre de la clase, separados
por un punto (por lo menos en VB2003, he observado ciertas diferencias en
VB2005).

Si tienes alguna otra idea te lo agradecería

Saludos
Jordi




"Jesús López" escribió en el mensaje
news:Odv6lB$
Prueba lo siguiente:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo
Proyecto_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)

Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:eE16UK%
Hola a todos,

Para crear una instancia de una clase que existe en un proyecto, lo haría
así:

dim cls as new Clase_Ejemplo

si el nombre de la clase estuviera en una variable y lo programo en
VB2003, lo haría así:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)


¿como lo debería programar para obtener el mismo objeto de clase pero en
VB2005?
tal cual no funciona -> Tipo=Nothing
el nombre del proyecto es correcto y el nombre de la clase que tiene la
variable también


Muchas gracias
Jordi






Respuesta Responder a este mensaje
#3 Jesús López
28/07/2006 - 15:14 | Informe spam
Vamos a ver, funciona lo mismo en VS 2003 y VS 2005.

Hay varias formas de especificar una clase con una cadena, pero la más
completa es:

"EspacioNombres.NombreClase, NombreEnsamblado, Version= NumeroDeVersion,
Culture=NombreCultura, PublicKeyToken=El PKT"

Por ejemplo para un DataSet es:

"System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken·7a5c561934e089"

Las otras formas de especificar una clase son subconjuntos de la completa.
Por ejemplo, si la clase que quieres instanciar está en el mismo ensamblado
desde donde la quieres instanciar entonces es suficiente con poner
"EspacioNombres.NombreClase", pero si no, tienes que poner
"EspacioNombre.NombreClase, NombreEnsamblado". Si además está firmado con
nombre seguro, entonces tienes que poner el PKT.

Creo que en el ejemplo que te puse me faltaba la coma:

"Proyecto_Ejemplo.Clase_Ejemplo, Proyecto_Ejemplo"

Así que para poder decirte la cadena exacta tendrías que decirme:
1) ¿Dónde está el ensamblado en el que se define la clase que quieres
instanciar?
2) ¿Desde qué ensamblado quieres instanciar la clase?
3) ¿El ensamblado que implementa la clase está firmado con nombre seguro?


Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:
He hecho la prueba y sigue sin funcionar

No entiendo lo que me proponías, tenía entendido que el nombre completo de
una clase era: Espacio de nombres de la raiz + Nombre de la clase,
separados por un punto (por lo menos en VB2003, he observado ciertas
diferencias en VB2005).

Si tienes alguna otra idea te lo agradecería

Saludos
Jordi




"Jesús López" escribió en el mensaje
news:Odv6lB$
Prueba lo siguiente:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo
Proyecto_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)

Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:eE16UK%
Hola a todos,

Para crear una instancia de una clase que existe en un proyecto, lo
haría así:

dim cls as new Clase_Ejemplo

si el nombre de la clase estuviera en una variable y lo programo en
VB2003, lo haría así:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)


¿como lo debería programar para obtener el mismo objeto de clase pero en
VB2005?
tal cual no funciona -> Tipo=Nothing
el nombre del proyecto es correcto y el nombre de la clase que tiene la
variable también


Muchas gracias
Jordi










Respuesta Responder a este mensaje
#4 Jordi Julià
03/08/2006 - 10:53 | Informe spam
Hola,

Para comenzar, gracias!

Te comento un poco lo que quiero realizar, tengo un proyecto WebForms con
una única página aspx vacia de controles, en tiempo de ejecución voy
cargando los controles que tengo definidos en una base de datos, el aspecto
exterior es como si hubiera definido diferentes páginas aspx.
Lo que quiero hacer es asociar diferentes clases (que existen en el
proyecto) como "Codebehind" a esa página, para que los eventos que se pueden
generar (definidos también en una base de datos) los pueda interceptar esas
clases, sólo una a la vez.

Mediante el ejemplo de código que expuse (y pongo a continuación) en VB2003
me realiza esta operación pero al convertir (mediante el proceso automático
de conversión) a VB2005 es cuando deja de funcionar porque no genera el tipo
de la clase.

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)









Te comento como he definido las propiedades del proyecto:

- Nombre del ensamblado Proyecto_Ejemplo
- Espacio de nombres raiz Proyecto_Ejemplo

- Cada una de las clases "Public class Clase_Ejemplo"

Debo reiterar que en la versión VB2003 esto funciona, la variable Tipo
recupera el tipo de la clase que le indico, pero al convertirlo a VB2005 la
variable Tipo queda a Nothing

Te comento también que los conceptos de ensamblado y espacio de nombres no
los tengo aun muy claros, por eso te he explicado todos estos comentarios.

Saludos y muchas gracias
Jordi



"Jesús López" escribió en el mensaje
news:%
Vamos a ver, funciona lo mismo en VS 2003 y VS 2005.

Hay varias formas de especificar una clase con una cadena, pero la más
completa es:

"EspacioNombres.NombreClase, NombreEnsamblado, Version= NumeroDeVersion,
Culture=NombreCultura, PublicKeyToken=El PKT"

Por ejemplo para un DataSet es:

"System.Data.DataSet, System.Data, Version=2.0.0.0, Culture=neutral,
PublicKeyToken·7a5c561934e089"

Las otras formas de especificar una clase son subconjuntos de la completa.
Por ejemplo, si la clase que quieres instanciar está en el mismo
ensamblado desde donde la quieres instanciar entonces es suficiente con
poner "EspacioNombres.NombreClase", pero si no, tienes que poner
"EspacioNombre.NombreClase, NombreEnsamblado". Si además está firmado con
nombre seguro, entonces tienes que poner el PKT.

Creo que en el ejemplo que te puse me faltaba la coma:

"Proyecto_Ejemplo.Clase_Ejemplo, Proyecto_Ejemplo"

Así que para poder decirte la cadena exacta tendrías que decirme:
1) ¿Dónde está el ensamblado en el que se define la clase que quieres
instanciar?
2) ¿Desde qué ensamblado quieres instanciar la clase?
3) ¿El ensamblado que implementa la clase está firmado con nombre seguro?


Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:
He hecho la prueba y sigue sin funcionar

No entiendo lo que me proponías, tenía entendido que el nombre completo
de una clase era: Espacio de nombres de la raiz + Nombre de la clase,
separados por un punto (por lo menos en VB2003, he observado ciertas
diferencias en VB2005).

Si tienes alguna otra idea te lo agradecería

Saludos
Jordi




"Jesús López" escribió en el mensaje
news:Odv6lB$
Prueba lo siguiente:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo
Proyecto_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)

Saludos:

Jesús López



"Jordi Julià" escribió en el mensaje
news:eE16UK%
Hola a todos,

Para crear una instancia de una clase que existe en un proyecto, lo
haría así:

dim cls as new Clase_Ejemplo

si el nombre de la clase estuviera en una variable y lo programo en
VB2003, lo haría así:

dim Variable as string = "Proyecto_Ejemplo.Clase_Ejemplo"
dim Tipo as Type = Type.GetType(Variable)
dim Clase as object = Activator.CreateInstance(Tipo, Params)


¿como lo debería programar para obtener el mismo objeto de clase pero
en VB2005?
tal cual no funciona -> Tipo=Nothing
el nombre del proyecto es correcto y el nombre de la clase que tiene la
variable también


Muchas gracias
Jordi














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