Sobes.tech
Middle

Vai ir iespējams ierobežot tipus, kurus lietotājs nodos caur šablonu C#?

sobes.tech AI

Atbilde no AI

Jā, izmantojot ģenerisko ierobežojumus (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T jāīsteno IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T jābūt atsauces tipam
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T jābūt vērtības tipam
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Apvienotie ierobežojumi
{
    // ...
}

Ierobežojumu veidi:

  • where T : struct: Tips jābūt vērtības tipam (nav nullable).
  • where T : class: Tips jābūt atsauces tipam.
  • where T : new(): Tips jābūt publiskam bezparametru konstruktoram. Šo ierobežojumu nevar izmantot kopā ar struct un class.
  • where T : BaseClass: Tips jāmanto no BaseClass vai jābūt pašam BaseClass.
  • where T : IInterface: Tips jāīsteno ar IInterface interfeisu.
  • where T : U: Tips T jābūt vai jāmanto no U, kur U ir cits tipa parametrs.

Var kombinēt vairākus ierobežojumus, tos atdalot ar komatu. Ierobežojumi uz bāzes klasi vai interfeisu jānorāda pirmajiem.