Ответ
Обобщенные типы (generics) — это механизм C#, позволяющий создавать классы, интерфейсы и методы, которые работают с любыми типами данных, сохраняя строгую проверку типов на этапе компиляции. Они устраняют необходимость приведения типов (casting) и упаковки/распаковки (boxing/unboxing) для значимых типов.
Основная идея: вы пишете код один раз, а компилятор генерирует его специализированные версии для каждого используемого типа.
Пример обобщенного класса:
public class Repository<T>
{
private List<T> _items = new List<T>();
public void Add(T item)
{
_items.Add(item);
}
public T GetById(int id)
{
// Логика поиска...
return _items[id];
}
}
// Использование с разными типами:
Repository<int> intRepo = new Repository<int>();
intRepo.Add(42); // Компилятор знает, что T — это int
Repository<string> stringRepo = new Repository<string>();
stringRepo.Add("Hello"); // Компилятор знает, что T — это string
// stringRepo.Add(42); // ОШИБКА КОМПИЛЯЦИИ: неверный тип
Ключевые преимущества:
- Безопасность типов: Ошибки несоответствия типов обнаруживаются на этапе компиляции, а не во время выполнения.
- Производительность: Для значимых типов (value types) избегается дорогостоящая операция упаковки.
- Повторное использование кода: Одна реализация работает для множества типов.
- Читаемость: Код становится более выразительным, так как намерения явно указаны через параметры типа.