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 ինտերֆեյսը և ունենա առանց պարամետրերի կոնստրուկտոր։