Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Практика по C#: Индексаторы и перегрузка операторов

Набор практических заданий для отработки двух ключевых тем языка C#.

🎯 Ключевые темы

  • 🔢 Перегрузка индексаторов (разные типы параметров, несколько параметров, проверка границ)
  • ⚖️ Перегрузка операторов отношений (<, >, <=, >=) и равенства (==, !=)
  • ✅ Операторы true/false — участие объектов в условных выражениях

📝 Как работать с задачами

  1. 📚 Изучите задачи ниже (обязательные и дополнительные отмечены отдельно).
  2. 💻 Откройте решение SecondKT.sln в Rider/VS и перейдите в проект App.
  3. ✍️ Реализуйте недостающий код в файлах с заданиями. Места для реализации снабжены комментариями. Броски NotImplementedException оставлены намеренно.
  4. 🧪 Запустите проект App.Tests. Изначально все тесты падают — цель сделать «зелёными» тесты по решённым задачам.

💡 Подсказка: Задачи со звёздочкой (*) — повышенной сложности и НЕ являются обязательными.


📁 Структура проекта

/App
  /Topics
    /Indexers
      /T1_1_IntList
      /T1_2_KeyValueStore
      /T1_3_Matrix2D
    /Operators
      /T2_1_Money
      /T2_2_VersionLite
/App.Tests
  # Зеркальная структура с тестами на каждую задачу
/src
  # Материалы/презентации

🧱 Тема 1: Перегрузка индексаторов

Индексатор — это специальное свойство, позволяющее обращаться к объекту как к массиву. Важно уметь перегружать индексаторы по типам и числу параметров, а также корректно обрабатывать выход за границы.

✅ Обязательные задачи

T1.1_IntList — базовый одномерный индексатор (int index)
  • Реализуйте динамический список целых чисел:
    • this[int index] с get/set и проверкой границ.
    • Поведение set:
      • если index == Count — добавление в конец;
      • если 0 <= index < Count — замена значения;
      • иначе — ArgumentOutOfRangeException.
    • Свойство Count — текущее число элементов.
  • Крайние случаи: отрицательный индекс, чтение из пустого, запись за пределами текущей длины.
T1.2_KeyValueStore — перегрузка индексаторов по типам
  • Два индексатора, работающих со связанным хранилищем значений string:
    • this[int id]
    • this[string key]
  • get: неизвестный ключ/ид → KeyNotFoundException.
  • set: добавляет/заменяет значение.
  • Доступ по null строке → ArgumentNullException.
T1.3_Matrix2D — индексатор по двум координатам
  • Матрица фиксированного размера с хранением во внутреннем 1D-массиве.
  • Индексатор this[int row, int col] с проверкой границ (row in [0, Rows), col in [0, Cols)).
  • Отображение (row, col) -> index = row * Cols + col.
  • Конструктор валидирует rows > 0, cols > 0.

⚙️ Тема 2: Перегрузка операторов отношений и true/false

Важно обеспечить согласованность равенства и сравнения с Equals/GetHashCode и IComparable<T>. Операторы true/false позволяют использовать объекты в условных выражениях.

✅ Обязательные задачи

T2.1_Money — value object и операторы ==, !=, +, -, ++, --, /, %
  • Структура: string Currency, long Amount (в минимальных единицах).
  • Валидируйте Currency (не null/empty/whitespace).
  • Реализуйте арифметические операторы:
    • + и - между двумя Money с ОДИНАКОВОЙ валютой (иначе → InvalidOperationException).
    • ++ и -- (возвращают новый экземпляр с Amount ± 1).
    • / и % только с целым делителем: Money / int, Money % int (деление с усечением к нулю; деление/остаток на ноль → DivideByZeroException).
  • Равенство: совпадают валюта и сумма. В тестах ожидается нормализация регистра валюты.
T2.2_VersionLite — операторы <, >, <=, >=
  • Класс с read-only int свойствами Major, Minor, Patch.
  • Реализуйте IComparable<VersionLite> и операторы сравнения. Сначала сравниваем Major, потом Minor, потом Patch. Например "22.01.56" > "22.01.20" ("{Major}.{Minor}.{Patch}")
  • Конструктор: значения неотрицательны, иначе ArgumentOutOfRangeException.

🧪 Запуск тестов

  • Через IDE (Test Explorer) или командой: dotnet test
  • Сначала большинство тестов будет «красным» — это нормально. Делайте задачи по одной и добивайтесь «зелёных» тестов.
  • Тесты со звёздочкой (*) помечены категорией * и считаются дополнительными.

📎 Примечания

  • Решения должны соответствовать проверкам в тестах, включая обработку краевых случаев.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages