Array de clases sin dimencion

Iniciado por Fabricio, 2 Agosto 2017, 14:42 PM

0 Miembros y 1 Visitante están viendo este tema.

Fabricio

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

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

ivancea96

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 (csharp) [Seleccionar]
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.

Fabricio

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


ivancea96

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.

Fabricio

Hola ivancea96.
Muchas gracias por tu respuesta; lo probé y funciono.
Saludos.