Бывают такие ситуации, когда необходимо сделать реализацию для типа данных, например вернуть данные по умолчанию. Или как работать с классом, где нужно сделать поиск по уникальному идентификатору (пример картинка), а у классов ID разных типов данных? Для реализации этого существуют обобщения. Подробнее в этой статье.
Что это?
Термин обобщение, по существу, означает параметризированный тип. Особая роль параметризированных типов состоит в том, что они позволяют создавать классы, структуры, интерфейсы, методы и делегаты, в которых обрабатываемые данные указываются в виде параметра. С помощью обобщений можно, например, создать единый класс, который автоматически становится пригодным для обработки разнотипных данных. Класс, структура, интерфейс, метод или делегат, оперирующий параметризированным типом данных, называется обобщенным, как, например, обобщенный класс или обобщенный метод.
Пример работы с обобщением. Для инициализации класса с обобщением необходимо при создании класса указать в скобках название обобщения (чаще всего это большие буквы на английском начиная с T). Далее, в самом классе можно использовать это обобщение как тип данных.
Зачем?
Зачем они нужны, ведь можно всё преобразовывать в object? Проблема в упаковке и распаковке (преобразование в object и из него) которая затрачивает много ресурсов (страдает производительность) и нет возможности точно знать, какой это тип данных (без "костылей"), использовать функционал типа данных.
Применение
Полезным примером будет создание оболочки для валидации объекта разных типов данных.
В данном примере реализация системы займет много места в посте, поэтому скидываю ссылку на git репозиторий: https://github.com/CrispyPigeon/GenericsApp
Итог
Обобщения отличный инструмент для создания универсальных классов и методов с одним функционалом, но разными типами данных .
Телеграмм канал: https://t.me/dotnetreview
Источники: Термины