Повторение — Пользовательский список
Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 40 из 70.
Задание
ЛегкоДавайте создадим класс 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()
}
}
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов