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

Може да се комбинират няколко ограничения, разделени с запетая. Ограниченията за базовия клас или интерфейса трябва да бъдат посочени първи.