Sobes.tech
Junior — Middle

Vai ir ierobežojumi, definējot savu universālo šablonu (ģenerisku)?

sobes.tech AI

Atbilde no AI

Veidojot savu universālo šablonu (generics) C# ir pastāv dažādi ierobežojumi:

  • Parametru tipiem jābūt atsauces, vērtību tipiem vai tiem jābūt ar noteiktiem ierobežojumiem (constraints), piemēram, mantošana no noteiktas klases, interfeisa īstenošana, bezparametru konstruktora esamība.
  • Ja ir nepieciešama specifiska funkcionalitāte, primitivus tipus tieši bez ierobežojumiem izmantot nav iespējams.
  • Nav iespējams izveidot parametra tipa eksemplāru bez new() ierobežojuma, jo kompilators nezinās, kā to inicializēt.
  • Bez ierobežojumiem nav iespējams izmantot typeof(T) vai is T operatorus.

Ierobežojuma piemērs:

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

Šeit T jāīsteno interfeiss IEntity un tam jābūt bezparametru konstruktors.