![]() |
Neste artigo vou apresentar o novo recurso introduzido na versão 8.0 da linguagem C# conhecido como implmentação da interface padrão. |
Se o projeto for pequeno, podemos facilmente identificar as classes e fazer as alterações correspondentes conforme a interface muda. Mas, se o projeto for grande e complexo, seria muito difícil identificar todos os módulos e classes do projeto impactados pelas alterações.
Para
tentar minimizar esse tipo de problema foi implementado na versão 8.0 da
linguagem C# o recurso que vou traduzir por :
Implementação da interface padrão.
Antes de prosseguir vamos fazer um resumo dos principais conceitos
relacionados às interfaces antes da versão 8.0:
Agora vamos supor que temos uma interface IProduto com o código abaixo que é implementada em diversas classes do nosso projeto:
Agora vamos supor que temos que alterar esta interface incluindo o método AvaliaProduto(Produto produto) para realizar a avaliação dos produtos.
Estamos incluindo um novo membro na interface e teremos que alterar o código de todas as classes que implementam esta interface.
Outra solução seria criar outra interface IProdutoAvaliacao que inclui o novo método e que implementa a interface IProduto:
Esta abordagem parece resolver bem o problema mas se houver a necessidade de incluir novos membros na interface voltamos a velho problema.
Como o novo recurso - Implementação da interface padrão - resolve este problema ?
Este recurso permite a você escrever uma implementação de qualquer método na interface.
Isso mesmo !!! Fazer a implementação de um método na interface.
Ele é útil em situações nas quais você pode adicionar novos membros para interagir com uma implementação padrão, sem quebrar a implementação existente.
Assim, para o nosso exemplo podemos fazer a implementação do método AvaliaProduto() na interface:
Observe que na implementação usamos o modificador public mas podemos usar outros modificadores como: private, static, virtual, protected e também implementar um método abstrato usando abstract.
Vamos supor que a classe Teste implemente a interface IProduto:
Agora não temos mais que criar uma nova interface e alterar a implementação existente. A implementação estará disponível em uma instância da classe que implementou a interface:
Podemos também substituir a implementação padrão, e, neste caso, a nossa implementação será chamada.
Assim, podemos substituir a implementação padrão do método AvaliaProduto() na classe Teste conforme a seguir:
Agora ao usarmos a instância da classe Teste e chamarmos o método AvaliaProduto() :
Teremos como o resultado a utilização do método que implementamos:
Segundo a Microsoft, as principais motivações para a introdução deste novo
recurso foram:
Isto posto, precisamos atualizar nossos conceitos sobre interfaces:
Lembrando que este recurso é opcional e você não esta obrigado a usá-lo.
E estamos conversados...
"E Jesus lhe disse: Ninguém, que lança mão do arado e
olha para trás, é apto para o reino de Deus."
Lucas 9:62
Referências:
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
C# - Usando Listas com elegância - Macoratti
C# - Trabalhando com Coleções Genéricas do tipo List(<T>)
C# - Diferentes maneira de criar uma lista de objetos - Macoratti
C# - Acessando dados de um dicionário ordenado - Macoratti
C# - Usando um Dicionário para armazenar e ... - Macoratti
C# - Escolhendo a coleção correta para sua ... - Macoratti