Для себя Необходимо выполнить итоговую работу на курсе. Я только начала изучать C#, поэтому не получается разобраться, как лучше писать программу. Основные темы, которые вызывают сложности: классы и структуры, упаковка и распаковка, инкапсуляция, полиформизм, обобщения. Начало кода программы: abstract class Delivery { public string Address; } class HomeDelivery: Delivery { /* ... */ } class PickPointDelivery: Delivery { /* ... */ } class ShopDelivery: Delivery { /* ... */ } class Order < TDelivery, TStruct > where TDelivery: Delivery { public TDelivery Delivery; public int Number; public string Description; public void DisplayAddress() { Console.WriteLine(Delivery.Address); } // ... Другие поля } Требуется: Использование наследования; Использование абстрактных классов или членов класса; Использование принципов инкапсуляции; Использование переопределений методов/свойств; Использование минимум 4 собственных классов; Использование конструкторов классов с параметрами; Использование обобщений; Использование свойств; Использование композиции классов. Использование статических элементов или классов; Использование обобщенных методов; Корректное использование абстрактных классов (использовать их там, где это обусловлено параметрами системы); Корректное использование модификаторов элементов класса (чтобы важные поля не были доступны для полного контроля извне, использование protected); Использование свойств с логикой в get и/или set блоках. Использование методов расширения; Использование наследования обобщений; Использование агрегации классов; Использование индексаторов; Использование перегруженных операторов. Также хотелось бы разобраться с работой с файлами (работа с дисками и директориями, классы для работы с файлами).