Middle
115
questionbank
Можно ли ограничить типы, которые пользователь будет передавать через шаблон в C#?
Ответ от нейросети
sobes.tech AI
Да, используя ограничения универсальных типов (generic constraints).
public class MyGenericClass<T> where T : IMyInterface // T должен реализовывать IMyInterface
{
// ...
}
public class AnotherGenericClass<T> where T : class // T должен быть ссылочным типом
{
// ...
}
public class YetAnotherGenericClass<T> where T : struct // T должен быть значимым типом
{
// ...
}
public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Комбинированные ограничения
{
// ...
}
Виды ограничений:
where T : struct: Тип должен быть значимым (не nullable).where T : class: Тип должен быть ссылочным.where T : new(): Тип должен иметь публичный параметрless конструктор. Это ограничение не может использоваться сstructиclassодновременно.where T : BaseClass: Тип должен наследоваться отBaseClassили быть самимBaseClass.where T : IInterface: Тип должен реализовывать интерфейсIInterface.where T : U: ТипTдолжен быть или наследоваться от типаU, гдеU- другой параметр типа.
Можно комбинировать несколько ограничений, разделяя их запятой. Ограничения на базовый класс или интерфейс должны указываться первыми.