Menu
Coddy logo textTech

Recapitulação - Lista Personalizada

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 40 de 70.

challenge icon

Desafio

Fácil

Vamos construir uma classe CustomList que reúne todos os recursos avançados deste capítulo - sobrecarga de operadores, indexadores, substituição de ToString() e métodos de extensão - para criar uma coleção que pareça natural e intuitiva de usar.

Você organizará seu código em três arquivos:

  • CustomList.cs: Crie uma classe CustomList no namespace Collections que envolve um array de inteiros interno e fornece padrões de acesso intuitivos. Sua lista deve ter:
    • Um array de inteiros privado para armazenar itens e uma propriedade Count (com um setter privado) rastreando quantos itens estão armazenados
    • Um construtor que aceita uma capacidade (inteiro) e inicializa o array interno com esse tamanho
    • Um método Add(int item) que adiciona um item à próxima posição disponível (se houver espaço)
    • Um indexador this[int index] que permite obter e definir itens por posição
    • Um operador + sobrecarregado que combina duas CustomLists em uma nova contendo todos os itens de ambas (a capacidade da nova lista deve ser a soma de ambos os counts)
    • Um método ToString() sobrescrito que retorna os itens no formato [item1, item2, item3] - inclua apenas itens até o Count, não espaços vazios
  • ListExtensions.cs: Crie uma classe estática ListExtensions no namespace Collections com um método de extensão para sua CustomList:
    • Sum() - retorna a soma de todos os itens na lista (até o Count)
  • Program.cs: No seu arquivo principal, crie duas CustomLists, adicione itens a cada uma e, em seguida, demonstre todos os recursos funcionando juntos - use o indexador para acessar itens, combine listas com o operador +, imprima usando ToString() e calcule a soma usando seu método de extensão.

Você receberá seis entradas:

  • Três inteiros para adicionar à primeira lista
  • Três inteiros para adicionar à segunda lista

Crie a primeira lista com capacidade 5 e a segunda com capacidade 3. Adicione os três valores de entrada a cada respectiva lista.

Imprima a saída neste formato:

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

Por exemplo, se as entradas forem 10, 20, 30, 5, 15 e 25, a saída deve 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

Observe como todas as peças funcionam juntas - o indexador oferece acesso semelhante a um array, o operador + permite combinar listas naturalmente, o ToString() fornece uma saída legível e o método de extensão adiciona funcionalidade utilitária. É assim que classes bem projetadas se parecem!

Experimente você mesmo

using System;
using Collections;

class Program
{
    public static void Main(string[] args)
    {
        // Lê seis números inteiros
        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: Criar a primeira CustomList com capacidade 5
        // TODO: Adicionar a1, a2, a3 à primeira lista

        // TODO: Criar a segunda CustomList com capacidade 3
        // TODO: Adicionar b1, b2, b3 à segunda lista

        // TODO: Imprimir a Lista 1 usando ToString()
        // TODO: Imprimir a Lista 2 usando ToString()
        // TODO: Imprimir a Lista 1[0] usando o indexador
        // TODO: Combinar as listas usando o operador + e imprimir o resultado
        // TODO: Imprimir a soma da lista combinada usando o método de extensão Sum()
    }
}

Todas as lições de Programação Orientada a Objetos