Sobes.tech
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 и да има конструктор без параметри.