Sobes.tech
Junior — Middle

Există restricții în definirea propriului șablon universal (generic)?

sobes.tech AI

Răspuns de la AI

Atunci când se definesc modele universale proprii (generics) în C#, există anumite restricții:

  • Tipurile de parametri trebuie să fie referințe, tipuri de valoare sau să aibă restricții specifice (constraints), de exemplu, moștenire de la o anumită clasă, implementare a unei interfețe, existența unui constructor fără parametri.
  • Nu se pot folosi tipuri primitive direct fără restricții dacă este necesară o funcționalitate specifică.
  • Nu se pot crea instanțe ale tipului de parametru fără restricția new(), deoarece compilatorul nu știe cum să îl inițializeze.
  • Nu se pot folosi operatorii typeof(T) sau is T fără restricții.

Exemplu de restricție:

public class Repository<T> where T : IEntity, new()
{
    public T CreateNew() => new T();
}

Aici, T trebuie să implementeze interfața IEntity și să aibă un constructor fără parametri.