Sobes.tech
Junior — Middle

Կա՞ն սահմանափակումներ սեփական համընդհանուր ձևանմուշը (գեներիկ) սահմանելիս։

sobes.tech AI

Պատասխան AI-ից

Երբ դուք սահմանում եք ձեր սեփական համընդհանուր շաբլոնները (generics) C#-ում, կան որոշ սահմանափակումներ:

  • Պարամետ տիպերը պետք է լինեն հղումներ, արժեքային տիպեր կամ ունենան որոշակի սահմանափակումներ (constraints), օրինակ՝ ժառանգել որոշակի դասից, իրականացնել ինտերֆեյս, ունենալ առանց պարամետրերի կոնստրուկտոր:
  • Անհնար է ուղղակիորեն օգտագործել հիմնական տիպեր առանց սահմանափակումների, եթե պահանջվում է հատուկ գործառույթ:
  • Չի կարելի ստեղծել պարամետրի տիպի օրինակ առանց new() սահմանափակման, քանի որ կոմպիլյատորը չգիտի, ինչպես այն սկսել:
  • Չի կարելի օգտագործել typeof(T) կամ is T օպերատորներ առանց սահմանափակումների:

Սահմանափակման օրինակ:

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

Այստեղ T-ն պետք է իրականացնի IEntity ինտերֆեյսը և ունենա առանց պարամետրերի կոնստրուկտոր։