Menu
Coddy logo textTech

Повторение — Пользовательский список

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 40 из 70.

challenge icon

Задание

Легко

Давайте создадим класс CustomList, который объединяет все расширенные возможности из этой главы — перегрузку операторов, индексаторы, переопределение ToString() и методы расширения — чтобы создать коллекцию, использование которой кажется естественным и интуитивно понятным.

Вы организуете свой код в трех файлах:

  • CustomList.cs: Создайте класс CustomList в пространстве имен Collections, который оборачивает внутренний массив целых чисел и обеспечивает интуитивно понятные шаблоны доступа. Ваш список должен иметь:
    • Закрытый массив целых чисел для хранения элементов и свойство Count (с закрытым сеттером), отслеживающее количество сохраненных элементов
    • Конструктор, который принимает емкость (целое число) и инициализирует внутренний массив этим размером
    • Метод Add(int item), который добавляет элемент в следующую доступную позицию (если есть место)
    • Индексатор this[int index], который позволяет получать и устанавливать элементы по позиции
    • Перегруженный оператор +, который объединяет два CustomList в новый, содержащий все элементы из обоих (емкость нового списка должна быть равна сумме количеств элементов в обоих списках)
    • Переопределенный метод ToString(), который возвращает элементы в формате [item1, item2, item3] — включайте только элементы до Count, не включая пустые слоты
  • ListExtensions.cs: Создайте статический класс ListExtensions в пространстве имен Collections с методом расширения для вашего CustomList:
    • Sum() — возвращает сумму всех элементов в списке (до Count)
  • Program.cs: В основном файле создайте два CustomList, добавьте элементы в каждый, а затем продемонстрируйте совместную работу всех функций — используйте индексатор для доступа к элементам, объедините списки с помощью оператора +, выведите результат с помощью ToString() и вычислите сумму с помощью метода расширения.

Вы получите шесть входных значений:

  • Три целых числа для добавления в первый список
  • Три целых числа для добавления во второй список

Создайте первый список с емкостью 5, а второй — с емкостью 3. Добавьте три входных значения в каждый соответствующий список.

Выведите результат в следующем формате:

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

Например, если входные данные — 10, 20, 30, 5, 15 и 25, вывод должен быть следующим:

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

Обратите внимание, как все части работают вместе: индексатор обеспечивает доступ как к массиву, оператор + позволяет естественно объединять списки, ToString() обеспечивает читаемый вывод, а метод расширения добавляет полезную функциональность. Именно так ощущаются хорошо спроектированные классы!

Попробуйте сами

using System;
using Collections;

class Program
{
    public static void Main(string[] args)
    {
        // Считать шесть целых чисел
        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: Создать первый CustomList с емкостью 5
        // TODO: Добавить a1, a2, a3 в первый список

        // TODO: Создать второй CustomList с емкостью 3
        // TODO: Добавить b1, b2, b3 во второй список

        // TODO: Вывести Список 1, используя ToString()
        // TODO: Вывести Список 2, используя ToString()
        // TODO: Вывести Список 1[0], используя индексатор
        // TODO: Объединить списки с помощью оператора + и вывести результат
        // TODO: Вывести сумму объединенного списка, используя метод расширения Sum()
    }
}

Все уроки раздела Объектно-ориентированное программирование