Sobes.tech
Junior — Middle

Existují nějaká omezení při definování vlastního univerzálního šablony (generického)?

sobes.tech AI

Odpověď od AI

Při definování vlastních univerzálních šablon (generics) v C# existují určité omezení:

  • Typy parametrů musí být odkazy, hodnotové typy nebo mít určité omezení (constraints), například dědit od určité třídy, implementovat rozhraní, mít konstruktor bez parametrů.
  • Nelze přímo používat primitivní typy bez omezení, pokud je požadována specifická funkčnost.
  • Nelze vytvářet instance typu parametru bez omezení new(), protože kompilátor neví, jak jej inicializovat.
  • Nelze používat operátory typeof(T) nebo is T bez omezení.

Příklad omezení:

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

Zde T musí implementovat rozhraní IEntity a mít konstruktor bez parametrů.