Sobes.tech
Middle

¿Se pueden limitar los tipos que un usuario transmitirá a través de una plantilla en C#?

sobes.tech AI

Respuesta de la IA

Sí, utilizando restricciones de tipos genéricos (generic constraints).

public class MyGenericClass<T> where T : IMyInterface // T debe implementar IMyInterface
{
    // ...
}

public class AnotherGenericClass<T> where T : class // T debe ser un tipo de referencia
{
    // ...
}

public class YetAnotherGenericClass<T> where T : struct // T debe ser un tipo de valor
{
    // ...
}

public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Restricciones combinadas
{
    // ...
}

Tipos de restricciones:

  • where T : struct: El tipo debe ser un tipo de valor (no nullable).
  • where T : class: El tipo debe ser un tipo de referencia.
  • where T : new(): El tipo debe tener un constructor público sin parámetros. Esta restricción no puede usarse con struct y class al mismo tiempo.
  • where T : BaseClass: El tipo debe heredar de BaseClass o ser BaseClass mismo.
  • where T : IInterface: El tipo debe implementar la interfaz IInterface.
  • where T : U: El tipo T debe ser o heredar del tipo U, donde U es otro parámetro de tipo.

Se pueden combinar varias restricciones separándolas con comas. Las restricciones en la clase base o interfaz deben indicarse primero.