Promoção no ar
Tempo restante da oferta:
20 Horas
36 Min
08 Seg
Assinar →

Implementações padrão em interfaces no C# 8

Veja como modificar interfaces existentes sem quebrar o código com o novo recurso de implementação padrão em interfaces do C# 8.

Wladimilson M. Nascimento 8 anos atrás

A definição de interfaces na orientação a objetos as definem como “padrões definidos através de contratos que são formados com as classes”. Assim como contratos as interfaces definem cláusulas (assinaturas de métodos) que a pessoa que o assina (as classes que as implementam) deverão seguir.

Desta forma, sempre ficou muito claro que as classes são obrigadas a implementar todos os métodos declarados em uma interface. Devido a este comportamento, quando é necessário adicionar um novo método em uma interface, as opções sempre foram: também alterar todas as classes que a implementa ou criar uma nova interface.

Para mudar este cenário, no C# 8 foi adicionado um novo recurso: implementação padrão.

Formação Desenvolvedor ASP.NET Full-Stack Conhecer a formação

Implementação padrão

Agora é possível adicionar um corpo para métodos definidos em uma interface. Com isso, caso o método não seja declarado na classe ou estrutura que implementar a interface, não é gerado nenhum erro.

Vamos a um exemplo, suponha a interface abaixo:

public interface IRepositorio<T> 
{ 
    List<T> ObterTodos();
} 

Que é implementada pela classe:

public class PessoaRepositorio: IRepositorio<Pessoa>
{
    public List<Pessoa> ObterTodos()
    {
        //....
    }
}

Suponha que seja necessário alterar a interface, para adicionar um novo método. Agora é possível fazer isso sem quebrar nenhum código:

public interface IRepositorio<T>  
{ 
    List<T> ObterTodos();
    T PrimeiroRegistro() => ObterTodos().FirstOrDefault();
} 

Mesmo que a classe PessoaRepositorio não implemente este novo método, ela ainda está satisfazendo o contrato. Um objeto dela não terá acesso a ele, mas ele pode ser “convertido” para a interface, que terá acesso ao método:

public static void Primeiro(PessoaRepositorio repositorio)
{
    IRepositorio irepositorio = repositorio; // Convertendo para a interface
    var pessoa = irepositorio.PrimeiroRegistro(); //Chamando o novo método 
}

Claro que se a classe implementar o método, a declaração padrão definida na interface será ignorada. E mesmo novas classes que implementarem a interface não precisarão definir o método.

Conclusão

Não recomendo que isso seja utilizado em novas interfaces para que elas se enquadrem em várias situações. A recomendação de sempre criar uma interface enxuta e objetiva não mudou. Mas este recurso será muito útil na hora da manutenção dos códigos.

Mesmo assim, lembre-se de sempre utilizá-lo com parcimônia. Dependendo da situação, talvez a melhor opção seja criar uma nova interface e não alterar uma existente.

Continue lendo

Artigos relacionados

Um ano de acesso total para você viver de programação.

Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro console.log ao mercado de trabalho.

  • 1 ano de acesso a todos os cursos
  • Cursos novos toda semana
  • Suporte direto com professores
  • Plano de carreira personalizado
  • Certificados digitais inclusos
  • Aplicativos para Android e iOS, com acesso offline
Garantia incondicional de satisfação

Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

Acesso completo a todos os cursos e dezenas de Formações.

12 meses
Economize R$ 840,00 54% OFF

de 12x R$ 129,00 por apenas

12x R$ 59,00

sem juros no cartão de crédito ou R$ 599,00 à vista

Oferta termina em 20h 36min 08s

  • Acesso imediato e ilimitado durante 1 ano.
  • Plano de carreira personalizado.
  • Suporte direto com professores.
  • E muito mais!
Matricule-se agora