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: ТипътTтрябва да бъде или да наследява отU, къдетоUе друг параметър на типа.
Може да се комбинират няколко ограничения, разделени с запетая. Ограниченията за базовия клас или интерфейса трябва да бъдат посочени първи.