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.