Sobes.tech
Junior — Middle

Vannak korlátozások saját univerzális sablon (generikus) meghatározásakor?

sobes.tech MI

Válasz az MI-től

Amikor saját általános sablonokat (generics) definiálunk C#-ban, bizonyos korlátozások vannak:

  • A paramétertípusok referencia-, értéktípusok vagy bizonyos korlátozások (constraints) lehetnek, például egy adott osztályból való öröklés, egy interfész megvalósítása, paraméter nélküli konstruktor megléte.
  • Nem lehet primitív típusokat közvetlenül korlátozások nélkül használni, ha speciális funkcionalitás szükséges.
  • Nem lehet példányokat létrehozni a típus paraméteréből a new() korlátozás nélkül, mivel a fordító nem tudja, hogyan inicializálja.
  • Nem lehet használni a typeof(T) vagy is T operátorokat korlátozások nélkül.

Korlátozás példája:

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

Itt T-nek meg kell valósítania az IEntity interfészt és rendelkeznie kell paraméter nélküli konstruktorral.