Sobes.tech
Middle

Կարո՞ղ է սահմանափակել այն տեսակները, որոնք օգտվողը փոխանցում է C#-ում ձևանմուշի միջոցով։

sobes.tech AI

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

այո, օգտագործելով ընդհանուր տիպերի սահմանափակումներ (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T պետք է իրականացնել IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T պետք է լինի հղումային տիպ
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T պետք է լինի արժեքային տիպ
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Կոմբինացված սահմանափակումներ
{
    // ...
}

Սահմանափակումների տեսակները:

  • where T : struct: Տիպը պետք է լինի արժեքային տիպ (չի կարող լինել nullable):
  • where T : class: Տիպը պետք է լինի հղումային տիպ:
  • where T : new(): Տիպը պետք է ունենա հանրային առանց պարամետրերի կոնստրուկտոր: Այս սահմանափակումը չի կարող օգտագործվել միաժամանակ struct և class-ի հետ:
  • where T : BaseClass: Տիպը պետք է ժառանգի BaseClass-ից կամ ինքն BaseClass-ն լինի:
  • where T : IInterface: Տիպը պետք է իրականացնել IInterface ինտերֆեյսը:
  • where T : U: Տիպը պետք է լինի կամ ժառանգի U-ից, որտեղ U է այլ տիպային պարամետր:

Կարող եք միաժամանակ մի քանի սահմանափակումներ օգտագործել ստորակետով բաժանելով։ Հիմնական դասը կամ ինտերֆեյսը պետք է նշվեն առաջինը։