Middle
É possível limitar os tipos que o usuário transmitirá através de um modelo em C#?
sobes.tech IA
Resposta da IA
Sim, usando restrições de tipos genéricos (generic constraints).
public class MyGenericClass<T> where T : IMyInterface // T deve implementar IMyInterface
{
// ...
}
public class AnotherGenericClass<T> where T : class // T deve ser um tipo de referência
{
// ...
}
public class YetAnotherGenericClass<T> where T : struct // T deve ser um tipo de valor
{
// ...
}
public class CombinedConstraints<T> where T : MyBaseClass, new(), IDisposable // Restrições combinadas
{
// ...
}
Tipos de restrições:
where T : struct: O tipo deve ser um tipo de valor (não nullable).where T : class: O tipo deve ser um tipo de referência.where T : new(): O tipo deve ter um construtor público sem parâmetros. Esta restrição não pode ser usada comstructeclassao mesmo tempo.where T : BaseClass: O tipo deve herdar deBaseClassou serBaseClassmesmo.where T : IInterface: O tipo deve implementar a interfaceIInterface.where T : U: O tipoTdeve ser ou herdar do tipoU, ondeUé outro parâmetro de tipo.
Pode-se combinar várias restrições, separando-as por vírgulas. As restrições na classe base ou interface devem ser indicadas primeiro.