none
Definir un arreglo multidimensional con diferentes tipos de objetos.

    Question

  • Hola a todos, quisiera que alguien me diga como se define un arreglo multidimensional con diferentes tipos de objetos en cada columna.
    por ejemplo, que en una sea del tipo integer, y otra de una clase Vehiculo...

    Saludos y graciasp  por su ayuda!
    Tuesday, March 31, 2009 8:44 PM

Answers

  • hola,

    podrias definir el tipo como object, y asi poder almacenar cualquier tipo, pero me parece bastante feo hacerlo de esta forma.

    de ultima despues para verificar el tipo puedes usar el IS, o el AS para casters sin errores:

    ClaseCustom clase = arreglo[0][0] as ClaseCustom;
    if(clase is null)
    {
    }

    Si o si tienen que ser array, no puedes usar clases, o clases genericas, o por ahi listas genericas.
    Creo que usar clases y generics seria mucho mejor.
    Puedes definir dentro de una clase propiedades de lista y asi contener diferentes tipos, o puedes utilizar interfaces y que todos los tipos que se puedadn agregar tengan que heredar de esta.

    Saludps
    Leandro Tuttini
    • Marked as answer by NioDeTark Thursday, December 17, 2009 11:05 PM
    Tuesday, March 31, 2009 9:01 PM
  • Hola,

    Te recomiendo un ArrayList, si esa misma lista de objetos puede contener distintos tipos de "tablas" como tu dices, o entidades.

    Si cada "lista" contiene sólo un tipo de entidad -lo más habitual y recomendable- insitiría muchísimo en que utilices las clases de System.Collections.Generic, donde puedes hacer listas con tipado fuerte.

    Por ejemplo:

    Dim equipoFutbol as List(Of Equipo)

    Después con eso puedes hacer cosas como...

    equipoFutbol.Add(New Equipo("Real Unión"))

    Además de hacer databindings con controles de tipo grid y demás, siempre con tipado fuerte.


    Te recomiendo que te documentes acerca de los genéricos:

    http://www.mundoprogramacion.com/colabora/NET2006/horacio_generics_vbnet.htm  (muy bueno y más "comprensible" que msdn)
    http://msdn.microsoft.com/es-es/library/system.collections.generic(VS.80).aspx
    http://msdn.microsoft.com/es-es/library/6sh2ey19(VS.80).aspx 
    Blog de desarrollo / Development blog
    • Marked as answer by NioDeTark Thursday, December 17, 2009 11:05 PM
    Tuesday, March 31, 2009 11:09 PM

All replies

  • hola,

    podrias definir el tipo como object, y asi poder almacenar cualquier tipo, pero me parece bastante feo hacerlo de esta forma.

    de ultima despues para verificar el tipo puedes usar el IS, o el AS para casters sin errores:

    ClaseCustom clase = arreglo[0][0] as ClaseCustom;
    if(clase is null)
    {
    }

    Si o si tienen que ser array, no puedes usar clases, o clases genericas, o por ahi listas genericas.
    Creo que usar clases y generics seria mucho mejor.
    Puedes definir dentro de una clase propiedades de lista y asi contener diferentes tipos, o puedes utilizar interfaces y que todos los tipos que se puedadn agregar tengan que heredar de esta.

    Saludps
    Leandro Tuttini
    • Marked as answer by NioDeTark Thursday, December 17, 2009 11:05 PM
    Tuesday, March 31, 2009 9:01 PM
  • Holaa... muchisimas gracias por tu respuesta.
    No... no tiene que ser arreglos exactamente. El tema es que vengo de VB 6... y ahora estoy entrando en el mundo de la programacion OO. Me marean un poco las interfaces...

    Te cuento exactamente lo que quiero hacer.
    La tabla es una tabla de un campeonato de futbol, donde la primera columna es el objeto Equipo, la segunda columna es un integer que representa  los puntos que tiene el equipo en esa fecha, tercera y cuarta serian los goles a favor  y en contra.

    las tablas son objetos en si mismos, porque tienen categoria y la fecha que representan, es decir si son de la categoria A,  B o C, y si son de la primera, segunda , tercera.... fecha...

    La idea de hacer un array  es porque se ajusta exactamente a lo que busco, peroo... veo que en VB.Net no se permiten arreglos multidimensionales de diferentes tipos de objetos.

    Acepto tus sugerencias.

    Saludoss!
    Tuesday, March 31, 2009 9:57 PM
  • Hola,

    Te recomiendo un ArrayList, si esa misma lista de objetos puede contener distintos tipos de "tablas" como tu dices, o entidades.

    Si cada "lista" contiene sólo un tipo de entidad -lo más habitual y recomendable- insitiría muchísimo en que utilices las clases de System.Collections.Generic, donde puedes hacer listas con tipado fuerte.

    Por ejemplo:

    Dim equipoFutbol as List(Of Equipo)

    Después con eso puedes hacer cosas como...

    equipoFutbol.Add(New Equipo("Real Unión"))

    Además de hacer databindings con controles de tipo grid y demás, siempre con tipado fuerte.


    Te recomiendo que te documentes acerca de los genéricos:

    http://www.mundoprogramacion.com/colabora/NET2006/horacio_generics_vbnet.htm  (muy bueno y más "comprensible" que msdn)
    http://msdn.microsoft.com/es-es/library/system.collections.generic(VS.80).aspx
    http://msdn.microsoft.com/es-es/library/6sh2ey19(VS.80).aspx 
    Blog de desarrollo / Development blog
    • Marked as answer by NioDeTark Thursday, December 17, 2009 11:05 PM
    Tuesday, March 31, 2009 11:09 PM
  • A ver... vuelvo a la carga, es que todo es nuevo para mi y me lleva tiempo procesar las cosas...

    hice lo siguiente... cree una clase que se llama LineaTabla, el cual tiene como propiedades los datos de una linea, es decir los siguientes:

     

    Dim equipo As Equipo ' referencia al objeto equipo
    Dim puntos As Integer
    Dim golesFavor As Integer
    Dim golesContra As Integer

     luego, hice otra clase llamada TablaPosiciones que tiene los siguiente:

     

    Dim tabla(11) As LineaTabla
    Dim fecha As Integer

    Como vemos, tiene un arreglo de objetos LineaTabla,...
    Luego, en alguna parte del codigo, la propiedad "Puntos" del los objetos LineaTabla son actualizados dependiendo si ganaron, perdieron o empataron sus correspondientes partidos. Luego, el objeto TablaPosiciones, contiene una propiedad "Tabla"  que es un arreglo, el cual esta desordenado, ya que algun equipo sumo mas  puntos que otros.
    Ya que los ejemplos que encuentro de los metodos sort son siempre sobre arrays que tienen tipos de datos integer o string.
    Como se ordena esta tabla que tiene un tipo de dato que es un objeto, y donde la clave para ordenar es una propiedadd de dicho objeto?

    Es posible esto? o tendre que hacer un procedimiento especifico?
    saludos y gracias a todos por su interes

    He aqui la pregunta, como hago para ORDENAR el objeto TABLA segun la propiedad LINEATABLA.PUNTOS.

    Saludos a todos y gracias

    PD para j-bosch: primero que nada disculpas la tardanza, no  me acostumbro al foro del msdn, segundo, te agradezco tus recomendaciones,  y las voy a tener en cuenta, solo que todavia estoy muy verde para entenderlas, estuve leyendo los links que me diste y prometo que volvere a la carga con ellos cuando entienda un poquito mas, por ahora, solo puedo avanzar sobre lo que entiendo...





    Thursday, April 23, 2009 10:22 PM