Menu
Coddy logo textTech

Resumen - Lista personalizada

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 40 de 70.

challenge icon

Desafío

Fácil

Vamos a construir una clase CustomList que reúna todas las características avanzadas de este capítulo (sobrecarga de operadores, indexadores, anulación de ToString() y métodos de extensión) para crear una colección que se sienta natural e intuitiva de usar.

Organizarás tu código en tres archivos:

  • CustomList.cs: Crea una clase CustomList en el espacio de nombres Collections que envuelva un arreglo de enteros interno y proporcione patrones de acceso intuitivos. Tu lista debe tener:
    • Un arreglo de enteros privado para almacenar elementos y una propiedad Count (con un setter privado) que rastree cuántos elementos hay almacenados
    • Un constructor que acepte una capacidad (entero) e inicialice el arreglo interno con ese tamaño
    • Un método Add(int item) que añada un elemento a la siguiente posición disponible (si hay espacio)
    • Un indexador this[int index] que permita obtener y establecer elementos por posición
    • Un operador + sobrecargado que combine dos CustomLists en una nueva que contenga todos los elementos de ambas (la capacidad de la nueva lista debe ser la suma de ambos conteos)
    • Un método ToString() anulado que devuelva los elementos en el formato [item1, item2, item3]; solo incluye los elementos hasta Count, no los espacios vacíos
  • ListExtensions.cs: Crea una clase estática ListExtensions en el espacio de nombres Collections con un método de extensión para tu CustomList:
    • Sum(): devuelve la suma de todos los elementos de la lista (hasta Count)
  • Program.cs: En tu archivo principal, crea dos CustomLists, añade elementos a cada una y luego demuestra todas las características funcionando juntas: usa el indexador para acceder a los elementos, combina las listas con el operador +, imprime usando ToString() y calcula la suma usando tu método de extensión.

Recibirás seis entradas:

  • Tres enteros para añadir a la primera lista
  • Tres enteros para añadir a la segunda lista

Crea la primera lista con capacidad 5 y la segunda con capacidad 3. Añade los tres valores de entrada a cada lista respectiva.

Imprime la salida en este formato:

List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}

Por ejemplo, si las entradas son 10, 20, 30, 5, 15 y 25, la salida debería ser:

List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105

Observa cómo todas las piezas funcionan juntas: el indexador te da un acceso similar al de un arreglo, el operador + te permite combinar listas de forma natural, ToString() proporciona una salida legible y el método de extensión añade funcionalidad de utilidad. ¡Así es como se sienten las clases bien diseñadas!

Pruébalo tú mismo

using System;
using Collections;

class Program
{
    public static void Main(string[] args)
    {
        // Lee seis enteros
        int a1 = Convert.ToInt32(Console.ReadLine());
        int a2 = Convert.ToInt32(Console.ReadLine());
        int a3 = Convert.ToInt32(Console.ReadLine());
        int b1 = Convert.ToInt32(Console.ReadLine());
        int b2 = Convert.ToInt32(Console.ReadLine());
        int b3 = Convert.ToInt32(Console.ReadLine());

        // TODO: Crear la primera CustomList con capacidad 5
        // TODO: Añadir a1, a2, a3 a la primera lista

        // TODO: Crear la segunda CustomList con capacidad 3
        // TODO: Añadir b1, b2, b3 a la segunda lista

        // TODO: Imprimir List 1 usando ToString()
        // TODO: Imprimir List 2 usando ToString()
        // TODO: Imprimir List 1[0] usando el indexador
        // TODO: Combinar listas usando el operador + e imprimir el resultado
        // TODO: Imprimir la suma de la lista combinada usando el método de extensión Sum()
    }
}

Todas las lecciones de Programación Orientada a Objetos