none
Asignación objeto en tiempo de ejecuccion RRS feed

  • 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 Type

    Por otro lado:

     Dim Tramos() As Tramo

    Pero me falla en la linea:

    Set Tramos(Pos).Elemento = New Linea

    Error: Invalid use of New keyword

    lunes, 2 de julio de 2012 10:53

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
    lunes, 2 de julio de 2012 13:47

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

    lunes, 2 de julio de 2012 11:02
  • No se que tipo de objeto vas a guardar en Elemento
    Lo que quiero guardar es un tipo hecho por mi como puede ser linea u otro. Como no lo se por eso Elemento es de tipo object
    lunes, 2 de julio de 2012 11:51
  • 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
    lunes, 2 de julio de 2012 13:47