Hacer Referencia a un objeto que no se sabe el tipo

29/09/2003 - 09:21 por Francisco | Informe spam
Hola:

¿Como puedo hacer referencia a las propiedades de un objeto que no se el
tipo en tiempo de diseño?

Ejemplo: poder hacer referencia a la propiedad name de obj que es de tipo
object.

private sub miCalculo ( obj as object)
if obj.name = "Uno" then

else

end if
end sub

Se que existe el ctype pero hay que especificar explicitamente el tipo de
objeto.

Agradeceria cualquier ayuda o consejo.

Muchas Gracias.

Saludos
Francisco

Preguntas similare

Leer las respuestas

#1 SqlRanger
29/09/2003 - 11:40 | Informe spam
Con Visual Basic .NET no necesitas hacer nada especial, simplemente
desacrivar la opción de compilador strict:

Option Strict Off

Que además se encuentra deshabilitada de forma predeterminada. Con esta
opción deshabilidada puedes hacer uso del "late binding" a través de object,
es decir, que si el objeto en cuestión tiene un método o propiedad, puedes
invorcarlo. O sea, este código:

private sub miCalculo ( obj as object)
if obj.name = "Uno" then

else

end if
end sub

Funcionará siempre que el objeto obj tenga la propiedad "name". Sin embargo,
si puedes evitar el "late binding" evítalo. El "late binding" es más lento,
puesto que se tiene que hacer uso de Reflection para la invocación, además
puede provocar errores en tiempo de ejecución que no aparecerían de otra
manera. ¿ Cómo evitarlo?. Pues si sabes que todos los objetos que se pasan
por parámetro derivan de una determinada clase, o implementan un determinado
interfaz que tienen las propiedades y métodos que vas a usar, usa esa clase
base o interfaz:

private sub miCalculo( obj as ClaseBase )

private sub miCalculo( obj as IElInterfaz )

O si los objetos que se pasan son de clases que tú mismo implementas, haz
que todas deriven de una clase común, o haz que implementen un determinado
interfaz.


Por ejemplo si vas a utilizar la propiedad name, podrías definir un
interfaz:

Public Interface Nombrable
Property Name As String
End Inteerface

y todas las clases cuyos objetos se pasen por parámetro implementarían este
interfaz:

Public Class MiClase
Implements Nombrable

etc

End Class

Luego tu método ya no hace falta que el parámetro sea object sino del
interfaz

private sub miCalculo( obj as Nombrable)
If obj.Name = "Uno" then


end sub


Saludos:

Jesús López
MVP Microsoft .NET
MCP SQL Server
Respuesta Responder a este mensaje
#2 Omar Salinas
29/09/2003 - 19:38 | Informe spam
Usa reflection
(obj as object).GetType()

¡Saludos!

"Francisco" wrote in message
news:
Hola:

¿Como puedo hacer referencia a las propiedades de un objeto que no se el
tipo en tiempo de diseño?

Ejemplo: poder hacer referencia a la propiedad name de obj que es de tipo
object.

private sub miCalculo ( obj as object)
if obj.name = "Uno" then

else

end if
end sub

Se que existe el ctype pero hay que especificar explicitamente el tipo de
objeto.

Agradeceria cualquier ayuda o consejo.

Muchas Gracias.

Saludos
Francisco


Respuesta Responder a este mensaje
#3 Francisco
30/09/2003 - 10:12 | Informe spam
Ok Gracias, aunque no tengo muy claro lo de la reflection.

Por otro lado supongo que se pueden crear un modulo desactivando Option
Strict y agrupar este tipo de funciones. El recto estarian con Option Strict
ON.


Saludos
Francisco

"SqlRanger" escribió en el mensaje
news:%
Con Visual Basic .NET no necesitas hacer nada especial, simplemente
desacrivar la opción de compilador strict:

Option Strict Off

Que además se encuentra deshabilitada de forma predeterminada. Con esta
opción deshabilidada puedes hacer uso del "late binding" a través de


object,
es decir, que si el objeto en cuestión tiene un método o propiedad, puedes
invorcarlo. O sea, este código:

private sub miCalculo ( obj as object)
if obj.name = "Uno" then

else

end if
end sub

Funcionará siempre que el objeto obj tenga la propiedad "name". Sin


embargo,
si puedes evitar el "late binding" evítalo. El "late binding" es más


lento,
puesto que se tiene que hacer uso de Reflection para la invocación,


además
puede provocar errores en tiempo de ejecución que no aparecerían de otra
manera. ¿ Cómo evitarlo?. Pues si sabes que todos los objetos que se pasan
por parámetro derivan de una determinada clase, o implementan un


determinado
interfaz que tienen las propiedades y métodos que vas a usar, usa esa


clase
base o interfaz:

private sub miCalculo( obj as ClaseBase )

private sub miCalculo( obj as IElInterfaz )

O si los objetos que se pasan son de clases que tú mismo implementas, haz
que todas deriven de una clase común, o haz que implementen un determinado
interfaz.


Por ejemplo si vas a utilizar la propiedad name, podrías definir un
interfaz:

Public Interface Nombrable
Property Name As String
End Inteerface

y todas las clases cuyos objetos se pasen por parámetro implementarían


este
interfaz:

Public Class MiClase
Implements Nombrable

etc

End Class

Luego tu método ya no hace falta que el parámetro sea object sino del
interfaz

private sub miCalculo( obj as Nombrable)
If obj.Name = "Uno" then


end sub


Saludos:

Jesús López
MVP Microsoft .NET
MCP SQL Server


Respuesta Responder a este mensaje
#4 Francisco
30/09/2003 - 10:14 | Informe spam
Hola Omar.

No se exactamente a que te refieres con la reflection de esa forma. Si
pudieras poner un ejemplo simple.

Gracias


Saludos
Francisco

"Omar Salinas" escribió en el mensaje
news:%23RY$
Usa reflection
(obj as object).GetType()

¡Saludos!

"Francisco" wrote in message
news:
> Hola:
>
> ¿Como puedo hacer referencia a las propiedades de un objeto que no se el
> tipo en tiempo de diseño?
>
> Ejemplo: poder hacer referencia a la propiedad name de obj que es de


tipo
> object.
>
> private sub miCalculo ( obj as object)
> if obj.name = "Uno" then
>
> else
>
> end if
> end sub
>
> Se que existe el ctype pero hay que especificar explicitamente el tipo


de
> objeto.
>
> Agradeceria cualquier ayuda o consejo.
>
> Muchas Gracias.
>
> Saludos
> Francisco
>
>


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