Middle
Czy można ograniczyć typy, które użytkownik będzie przekazywał przez szablon w C#?
sobes.tech AI
Odpowiedź od AI
Tak, używając ograniczeń typów generycznych (generic constraints).
public class MyGenericClass<T> where T : IMyInterface // T musi implementować IMyInterface
{
// ...
}
public class AnotherGenericClass<T> where T : class // T musi być typem referencyjnym
{
// ...
}
public class YetAnotherGenericClass<T> where T : struct // T musi być typem wartości
{
// ...
}
public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Połączone ograniczenia
{
// ...
}
Rodzaje ograniczeń:
where T : struct: Typ musi być typem wartości (nie nullable).where T : class: Typ musi być typem referencyjnym.where T : new(): Typ musi mieć publiczny konstruktor bez parametrów. To ograniczenie nie może być używane jednocześnie zstructiclass.where T : BaseClass: Typ musi dziedziczyć poBaseClasslub byćBaseClass.where T : IInterface: Typ musi implementować interfejsIInterface.where T : U: TypTmusi być lub dziedziczyć poU, gdzieUjest innym parametrem typu.
Można łączyć kilka ograniczeń, oddzielając je przecinkami. Ograniczenia na klasę bazową lub interfejs muszą być podane jako pierwsze.