Como crear una instancia de clase en VBNET2005

02/06/2006 - 09:32 por Jordi Julià | Informe spam
Hola a todos;



Necesito crear el tipo de una clase (de un Public Class - End Class) para
poder generar un objeto virtual de esa clase donde poder dirigir los eventos
que se producen en una página que ha sido creada en tiempo de ejecución.



En Vs2003 lo hacia de la siguiente manera:



Dim ClaseAsociada As Object

Dim TipoClase As Type



Dim NombreProyecto As String = ""

Dim NombreClase As String = "Clase"

Dim Params(6) As Object



NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

ClaseAsociada = Activator.CreateInstance(TipoClase, Params)



Gracias



Jordi

Preguntas similare

Leer las respuestas

#1 Guillermo guille
02/06/2006 - 19:18 | Informe spam
¿Que problema tienes con el VB2005?
¿Te da error?
Si es así, ¿que error?

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

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



Necesito crear el tipo de una clase (de un Public Class - End Class) para
poder generar un objeto virtual de esa clase donde poder dirigir los
eventos que se producen en una página que ha sido creada en tiempo de
ejecución.



En Vs2003 lo hacia de la siguiente manera:



Dim ClaseAsociada As Object

Dim TipoClase As Type



Dim NombreProyecto As String = ""

Dim NombreClase As String = "Clase"

Dim Params(6) As Object



NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

ClaseAsociada = Activator.CreateInstance(TipoClase, Params)



Gracias



Jordi


Respuesta Responder a este mensaje
#2 Jordi Julià
06/06/2006 - 11:00 | Informe spam
El problema que me da:

NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

con esta instrucción en vb2003 recuperaba el nombre del proyecto, que era el
mismo que en el diseño de la página html me asigna como "Inherits" de la
página, en vb2005 no da ese mismo nombre.

Poniendo un punto de depuración, he cambiado el valor de la variable por el
que corresponde como nombre del proyecto, pero cuando ejecuto la siguiente
sentencia:

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

la variable queda a nothing (la otra variable NombreClase tiene como valor
el nombre de una clase existente en el proyecto)


Al quedar a Nothing el Activator.CreateInstance(TipoClase, Params) da error.
Creo que el problema que tengo es al crear el tipo de clase, la idea que
tenia era la de crear un tipo de clase desde una de las clases existentes en
el proyecto de ahí viene lo de concatener las variables para conseguir :
"NombreProyecto.NombreClase".

La verdad es que aun no he entrado de lleno en el VB2005, estoy evaluando lo
que significaría el paso de los aplicativos que tenemos hechos. Y este es
uno de los principales problemas que de momento he visto.

Saludos
Jordi



"Guillermo 'guille'" escribió en el mensaje
news:
¿Que problema tienes con el VB2005?
¿Te da error?
Si es así, ¿que error?

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

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



Necesito crear el tipo de una clase (de un Public Class - End Class) para
poder generar un objeto virtual de esa clase donde poder dirigir los
eventos que se producen en una página que ha sido creada en tiempo de
ejecución.



En Vs2003 lo hacia de la siguiente manera:



Dim ClaseAsociada As Object

Dim TipoClase As Type



Dim NombreProyecto As String = ""

Dim NombreClase As String = "Clase"

Dim Params(6) As Object



NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

ClaseAsociada = Activator.CreateInstance(TipoClase, Params)



Gracias



Jordi






Respuesta Responder a este mensaje
#3 Guillermo guille
09/06/2006 - 21:06 | Informe spam
No me había fijado a que estabas hablando de un proyecto Web... (y es que
solo al releer el mensaje original me he fijado en lo de "página")

Pues parece que con "las novedades" de ASP.NET eso no es tan fácil, ni
siquiera en C#, ya que esa forma de actuar es del propio ASP.NET. Además con
el nuevo "sistema" de creación de ensamblados "al vuelo" lo tienes más
complicado.
En fin... espero que aparezca alguien que sepa el truco, ya que yo he mirado
y no he visto la forma de crear esas páginas "al vuelo".

Resumiendo, si quieres controlar esas cosas desde ASP.NET, mejor quédate con
lo que sabes que funciona ;-)))

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

"Jordi Julià" escribió en el mensaje
news:
El problema que me da:

NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

con esta instrucción en vb2003 recuperaba el nombre del proyecto, que era
el mismo que en el diseño de la página html me asigna como "Inherits" de
la página, en vb2005 no da ese mismo nombre.

Poniendo un punto de depuración, he cambiado el valor de la variable por
el que corresponde como nombre del proyecto, pero cuando ejecuto la
siguiente sentencia:

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

la variable queda a nothing (la otra variable NombreClase tiene como valor
el nombre de una clase existente en el proyecto)


Al quedar a Nothing el Activator.CreateInstance(TipoClase, Params) da
error.
Creo que el problema que tengo es al crear el tipo de clase, la idea que
tenia era la de crear un tipo de clase desde una de las clases existentes
en el proyecto de ahí viene lo de concatener las variables para conseguir
: "NombreProyecto.NombreClase".

La verdad es que aun no he entrado de lleno en el VB2005, estoy evaluando
lo que significaría el paso de los aplicativos que tenemos hechos. Y este
es uno de los principales problemas que de momento he visto.

Saludos
Jordi



"Guillermo 'guille'" escribió en el mensaje
news:
¿Que problema tienes con el VB2005?
¿Te da error?
Si es así, ¿que error?

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

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



Necesito crear el tipo de una clase (de un Public Class - End Class)
para poder generar un objeto virtual de esa clase donde poder dirigir
los eventos que se producen en una página que ha sido creada en tiempo
de ejecución.



En Vs2003 lo hacia de la siguiente manera:



Dim ClaseAsociada As Object

Dim TipoClase As Type



Dim NombreProyecto As String = ""

Dim NombreClase As String = "Clase"

Dim Params(6) As Object



NombreProyecto =
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name

TipoClase = Type.GetType(NombreProyecto & Chr(46) & NombreClase)

ClaseAsociada = Activator.CreateInstance(TipoClase, Params)



Gracias



Jordi










Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
10/06/2006 - 00:01 | Informe spam
Un punto que esta "mal" en el codigo es quere utilizar el nombre del
ensamblado como namespace. Esta bien que en un proyecto cualquiera por
defecto sean iguales, pero puede que no. Bueno, ahora a analizar el
problema. Supongo que lo que quieres es crear una instancia de un a clase
que esta en App_Code. La cosa es que si no hay ningun namespace especificado
en el archivo, la clase queda sin namespace con lo cual se podria hacer
directamente:

TipoClase = Type.GetType(NombreClase)

Si hay un namespace, entonces deberias obtenerlo (suponiendo que no es algo
fijo que ya sepas de antemano). Con App_Code tienes la ventaja que el
ensamblado siempre es App_Code.dll, entonces podrias cargar el ensamblado y
buscar la clase en el.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#5 Guillermo guille
10/06/2006 - 12:53 | Informe spam
Tampoco funciona así... además de que en realidad lo que quiere es crear
"formularios Web" a partir de un nombre, por tanto, (aunque funcionara), no
le serviría usar lo de App_Code ni aunque previamente lo compilara.

Lo único que me ha funcionado ahora, es usando el nombre interno que le da
el propio ASP.NET a las páginas Web.
Por ejemplo, si la página se llama Pagina2.aspx, el nombre de la clase es
Pagina2, ñero internamente ASP.NET crea una clase que se llama Pagina2_aspx
que está en el espacio de nombres ASP, por tanto si al código anterior le
quita el espacio de nombres obtenido a partir del ensamblado y lo cambia por
ASP, funcionaría:
O sabiendo esto, se puede hacer así:

Dim tipoClase As Type = Type.GetType("ASP." & nombreClase)

Donde nombreClase es el nombre de la página seguida con guión bajo y aspx
(todo junto)

P.S.
Y lo curioso es que apostaría que ayer probé esto mismo y no me funcionó...
en fin...

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/
Si buscas un buen plan de alojamiento:
http://www.elguille.info/hostings/o...guille.htm

"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:%
Un punto que esta "mal" en el codigo es quere utilizar el nombre del
ensamblado como namespace. Esta bien que en un proyecto cualquiera por
defecto sean iguales, pero puede que no. Bueno, ahora a analizar el
problema. Supongo que lo que quieres es crear una instancia de un a clase
que esta en App_Code. La cosa es que si no hay ningun namespace
especificado en el archivo, la clase queda sin namespace con lo cual se
podria hacer directamente:

TipoClase = Type.GetType(NombreClase)

Si hay un namespace, entonces deberias obtenerlo (suponiendo que no es
algo fijo que ya sepas de antemano). Con App_Code tienes la ventaja que el
ensamblado siempre es App_Code.dll, entonces podrias cargar el ensamblado
y buscar la clase en el.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C

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