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 constructyclassal mismo tiempo.where T : BaseClass: El tipo debe heredar deBaseClasso serBaseClassmismo.where T : IInterface: El tipo debe implementar la interfazIInterface.where T : U: El tipoTdebe ser o heredar del tipoU, dondeUes 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.