Junior — Middle
Има ли ограничения при определянето на собствен универсален шаблон (generic)?
sobes.tech AI
Отговор от AI
Когато дефинирате свои универсални шаблони (generics) в C#, съществуват някои ограничения:
- Типовете на параметрите трябва да бъдат референции, стойностни типове или да имат определени ограничения (constraints), например наследяване от определен клас, реализиране на интерфейс, наличие на конструктор без параметри.
- Не е възможно директно използване на примитивни типове без ограничения, ако е необходима специфична функционалност.
- Не е възможно създаване на екземпляри от типа на параметъра без ограничението new(), тъй като компилаторът не знае как да го инициализира.
- Не е възможно използването на операторите typeof(T) или is T без ограничения.
Пример за ограничение:
public class Repository<T> where T : IEntity, new()
{
public T CreateNew() => new T();
}
Тук T трябва да реализира интерфейса IEntity и да има конструктор без параметри.