Sobes.tech
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 com struct e class ao mesmo tempo.
  • where T : BaseClass: O tipo deve herdar de BaseClass ou ser BaseClass mesmo.
  • where T : IInterface: O tipo deve implementar a interface IInterface.
  • where T : U: O tipo T deve ser ou herdar do tipo U, onde U é 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.