Otra de tipos

08/01/2008 - 03:57 por Rolando | Informe spam
Otra de tipos:

A lo mejor es algo sencillo o hay una funcion para eso.

Si tengo un tipo en una variable MiTipo, Como puedo crear un objeto del tipo
contenido en la variable ?

ej.
..
<MiTipo> bd = new <MiTipo>();

MiTipo es una variable de tipo System.Type.

Preguntas similare

Leer las respuestas

#6 Rolando
08/01/2008 - 16:45 | Informe spam
Hola Alberto

Object obj = Activator.CreateInstance(...);
Sí que me ayudó esta vez la nueva version 2008 :)


En la sentencia que has puesto, el compilador interpreta "var"
exctamente igual que "object" porque ese es el tipo que le asignas en la
inicialización, asi que el 2008 no te aporta (en este caso) ninguna
ventaja respecto a las versiones anteriores.




No se si es una confusion pero yo hice la prueba y usando "var" me retorna
exactamente lo que quiero (el tipo especifico), no object:
Mira este ejemplo:

class MyClass1 : System.Windows.Forms.TextBox {}

System.Type MiTipo = typeof(MyClass1);

var objeto = Activator.CreateInstance(MiTipo);
MessageBox.Show(objeto.GetType().ToString());
//Esto devuelve "MyClass1" o sea que objeto no es directamente un 'Object'
sino un Myclass1, justo lo que yo quiero.

o sea que es equivalente a haber hecho un:
MyClass1 obj = new MyClass1(); //si conociera en ejecucion el nombre del
tipo que contiene la variable MiTipo.

Si quieres asignar a una variable de MiTipo el resultado de una función
que devuelve Object (y sabes que el Object devuelto es de tipo MiTipo), lo
que tienes que hacer es un "cast":

MiTipo obj = (MiTipo)Activator.CreateInstance(...);




Bien pero por eso te digo de la confusion porque es que en la logica del
programa yo no se que contendrá la variable MiTipo. En el ejemplo arriba
MiTipo tiene el tipo MyClass1 pero en la ejecucion podria ser otro por tanto
no puedo usar MiTipo para casting porque MiTipo no es el tipo mismo sino una
variable que lo almacena. Me explico bien?

Saludos y gracias ya que de todos modos me has dado la solución.
Respuesta Responder a este mensaje
#7 Alberto Poblacion
08/01/2008 - 16:59 | Informe spam
"Rolando" <rr> wrote in message
news:
var objeto = Activator.CreateInstance(MiTipo);
MessageBox.Show(objeto.GetType().ToString());
//Esto devuelve "MyClass1" o sea que objeto no es directamente un 'Object'
sino un Myclass1, justo lo que yo quiero.



Y si pones object en lugar de var, también te devuelve "MyClass1".
objeto.GetType() te devuelve el tipo real que hay dentro de objeto,
aunque esté declarado como Object.

Según los "entendidos", para facilitar la claridad y mantenibilidad del
código, conviene no abusar del "var", y usarlo únicamente cuando sea
imprescindible, cosa que solo ocurre cuando lo inicializas con un tipo
anónimo. Cuando se conozca el tipo que le vas a meter dentro, es preferible
declararlo expresamente (aunque sea "object").

Bien pero por eso te digo de la confusion porque es que en la logica del
programa yo no se que contendrá la variable MiTipo. En el ejemplo arriba
MiTipo tiene el tipo MyClass1 pero en la ejecucion podria ser otro por
tanto no puedo usar MiTipo para casting porque MiTipo no es el tipo mismo
sino una variable que lo almacena. Me explico bien?



Vale, en ese caso no tienes más remedio que trabajar con variables
declaradas como Object (o como var inicializado con un Object, que es lo
mismo).
Respuesta Responder a este mensaje
#8 Rolando
08/01/2008 - 17:23 | Informe spam
Y si pones object en lugar de var, también te devuelve "MyClass1".
objeto.GetType() te devuelve el tipo real que hay dentro de objeto,
aunque esté declarado como Object.




Perfecto. Ese era el detalle que me faltaba. No sabía que el tipo Object me
haría la conversión implícita.

Gracias.
Respuesta Responder a este mensaje
#9 principiante
08/01/2008 - 17:34 | Informe spam
Seguro que fue que viste en la ayuda que decía "Return type: Object". Tenlo
presente porque eso pasa tambien con otros metodos que dicen eso pero
realmente devuelven el tipo evaluado correcto.

Saludos y exitos que veo que te estas esforzando bastante en aprender.

Jose TH


"Rolando" escribió en el mensaje
news:%
Y si pones object en lugar de var, también te devuelve "MyClass1".
objeto.GetType() te devuelve el tipo real que hay dentro de objeto,
aunque esté declarado como Object.




Perfecto. Ese era el detalle que me faltaba. No sabía que el tipo Object
me haría la conversión implícita.

Gracias.


Respuesta Responder a este mensaje
#10 Rolando
08/01/2008 - 17:42 | Informe spam
Asi es lo he visto en la ayuda y no esta muy claro realmente.

Ya lo tendre pendiente en lo sucesivo.

Gracias




"principiante" escribió en el mensaje
news:
Seguro que fue que viste en la ayuda que decía "Return type: Object".
Tenlo presente porque eso pasa tambien con otros metodos que dicen eso
pero realmente devuelven el tipo evaluado correcto.

Saludos y exitos que veo que te estas esforzando bastante en aprender.

Jose TH


"Rolando" escribió en el mensaje
news:%
Y si pones object en lugar de var, también te devuelve "MyClass1".
objeto.GetType() te devuelve el tipo real que hay dentro de objeto,
aunque esté declarado como Object.




Perfecto. Ese era el detalle que me faltaba. No sabía que el tipo Object
me haría la conversión implícita.

Gracias.






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida