Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Fabricio en 2 Agosto 2017, 14:42 pm



Título: Array de clases sin dimencion
Publicado por: Fabricio en 2 Agosto 2017, 14:42 pm
Hola buenas tardes.
Tengo una pregunta.
Tengo 3 clases: Persona, Alumno y Docente.
Docente y Alumno heredan de persona
Quiero crear un array de tipo Persona, ingresar Alumnos y Docentes en cualquier orden y guardarlos en el arrat
No se cuantos alumnos y docentes se desea ingresar, por lo tanto no se el tamaño del array Persona.
Use este codigo pero no funciono.
El error es que array es una referencia a objeto nula
Código:
public void Cargar()       
        {
            Persona[] array = null;
           
            array [0] = new Alumno();
            array [1] = new Docente();
            array [2] = new Alumno();
            array [3] = new Docente();

            foreach (Persona p in array )
            {
                p.Caminar();
            }
        }
Si o si debo usar el tipo array, ni listas ni ninguna otra cosa, array
Podrian ayudarme
muchas gracias


Título: Re: Array de clases sin dimencion
Publicado por: ivancea96 en 2 Agosto 2017, 15:09 pm
Un array, para usaarlo, tienes siempre que crearlo primero. new Persona[5], por ejemplo.

Luego, si resutla que quieres agregar 1 elemento, tendrás que crear otro array de 6 elementos y copiar los 5 primeros del anterior array.

Para hacer esto ya hay un método, Array.Resize:
Código
  1. Array.Resize(ref array, 6);
Este método se encarga de copiar los elementos del array anterior al nuevo. Al ir por referencia, no hace falta que cambies el contenidod e tu array ni nada.


Título: Re: Array de clases sin dimencion
Publicado por: Fabricio en 2 Agosto 2017, 19:11 pm
Hola ivancea96.
Gracias por responder.
Una pregunta , que pasa si yo no ingreso por teclado el tipo de objeto que quiero crear ej primero un alumno, luego un docente, etc y a medida que elijo una opcion voy creando un array con el tipo de dato; este metodo me obliga a redimencionar el array cada ves que el usuario decida crear un objeto. Existe alguna otra forma de hacer esto usando arrays.
Muchas gracias



Título: Re: Array de clases sin dimencion
Publicado por: ivancea96 en 2 Agosto 2017, 19:29 pm
Una opción, que es la que usan muchas clases, es, en vez de redimensionar de 1 en 1, redimensionar con espacio extra. Generalmente, se suele ahcer duplicando el tamaño del array, pero esto ya depende. Por ejemplo, si un array de 4 se llena, lo redimensionamos a 8. Llenamos el quinto hueco, y el resto quedan sin usarse.

Para hacer esto, hay que almacenar además el tamaño del array "usado", para saber donde insertar o hasta donde leer.


Título: Re: Array de clases sin dimencion
Publicado por: Fabricio en 3 Agosto 2017, 13:24 pm
Hola ivancea96.
Muchas gracias por tu respuesta; lo probé y funciono.
Saludos.