Обобщённый класс определяется с помощью параметров типа, заключённых в угловые скобки (<T>). В отличие от обычного класса, который работает с конкретными типами данных, обобщённый класс может работать с любым типом данных, который определяется при создании экземпляра.
Например:
List<int> и List<string>
Оба — это экземпляры обобщённого класса List<T>, но работают с разными типами — int и string соответственно.
Ограничения задаются с помощью ключевого слова where. Оно определяет, какие типы можно использовать в качестве аргументов для параметра обобщённого типа.
Основные виды ограничений:
where T : MyBaseClasswhere T : IMyInterfacewhere T : new()class MyGenericClass<T> where T : MyClass, new()
Это ограничение гарантирует, что:
T — это MyClass или наследник MyClassT есть доступный конструктор без параметровОграничения обеспечивают гибкость при сохранении типобезопасности, предотвращая ошибки во время выполнения и гарантируя, что с твоими обобщёнными классами используются только подходящие типы.
Обобщённый класс, определённый как class MyClass<T>, может работать только со ссылочными типами, тогда как необобщённые классы работают и со значимыми, и со ссылочными типами.
Новый — ещё не проверен сообществом
Вы