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
 

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

Preguntas similares