Principales respuestas
Asignación objeto en tiempo de ejecuccion

Pregunta
-
Tengo una serie de tipos definidos por mi:
Type Linea
Coordenadas As Range3d
Longitud As Long
End Type
Type Tramo
Tipo As Boolean
Elemento As Object
End TypePor otro lado:
Dim Tramos() As Tramo
Pero me falla en la linea:
Set Tramos(Pos).Elemento = New Linea
Error: Invalid use of New keyword
Respuestas
-
Alberto, el detalle está en que Visual Basic es un lenguaje basado en COM. El tipo de datos Object es el equivalente a la interfase IDispatch. Los tipos definidos por el usuario con Type no son objetos COM sino meras estructuras.
Si usted necesita polimorfismo, entonces necesita utilizar interfases, pero no recuerdo si en VB usted puede hacer que una interfase "implemente" otra para así lograr el polimorfismo. Si no es posible, entonces deberá definir las interfases en una biblioteca de tipos (type library) usando el lenguaje MIDL y un compilador para dicho lenguaje. Visual C++ trae compilador MIDL.
Jose R. MCP
Code Samples- Marcado como respuesta Alberto8 miércoles, 11 de julio de 2012 12:43
Todas las respuestas
-
Hola,
Linea es un tipo, no un objeto. Por eso te da error al utilizar New para crear una nueva instancia.
No se que tipo de objeto vas a guardar en Elemento, pero suponiendo que fuese un formulario, harías algo como esto:
Set Tramos(Pos).Elemento = New MiFormulario
Saludos, Javier J
-
-
Alberto, el detalle está en que Visual Basic es un lenguaje basado en COM. El tipo de datos Object es el equivalente a la interfase IDispatch. Los tipos definidos por el usuario con Type no son objetos COM sino meras estructuras.
Si usted necesita polimorfismo, entonces necesita utilizar interfases, pero no recuerdo si en VB usted puede hacer que una interfase "implemente" otra para así lograr el polimorfismo. Si no es posible, entonces deberá definir las interfases en una biblioteca de tipos (type library) usando el lenguaje MIDL y un compilador para dicho lenguaje. Visual C++ trae compilador MIDL.
Jose R. MCP
Code Samples- Marcado como respuesta Alberto8 miércoles, 11 de julio de 2012 12:43