Sobes.tech
Junior — Middle

Existem restrições na definição do seu próprio modelo universal (genérico)?

sobes.tech IA

Resposta da IA

Ao definir modelos universais próprios (generics) em C#, existem algumas limitações:

  • Os tipos de parâmetros devem ser referências, tipos de valor ou ter restrições específicas (constraints), por exemplo, herdar de uma classe específica, implementar uma interface, ter um construtor sem parâmetros.
  • Não é possível usar tipos primitivos diretamente sem restrições se for necessária funcionalidade específica.
  • Não é possível criar instâncias do tipo de parâmetro sem a restrição new(), pois o compilador não sabe como inicializá-lo.
  • Não é possível usar os operadores typeof(T) ou is T sem restrições.

Exemplo de restrição:

public class Repository<T> where T : IEntity, new()
{
    public T CreateNew() => new T();
}

Aqui, T deve implementar a interface IEntity e ter um construtor sem parâmetros.