Interface em C#

Gerson Rodrigues Santos
NAVE Recife
Published in
4 min readJun 3, 2020

Fala galerinha, blz? Hoje vamos dar continuidade ao assunto de C# e neste artigo entenderemos o que são as interfaces. Não confundam Interface UI com o conceito de Interface OO, são duas coisas bem diferentes.

De acordo com a documentação do C#, uma Interface contém definições para um grupo de funcionalidades relacionadas que uma classe não abstrata ou uma estrutura deve implementar.

Em resumo, uma Interface funciona como um contrato entre ela e qualquer classe ou estrutura que a implementa. Ou seja, a classe que implementa uma interface é obrigada a implementar todos os seus membros, sejam eles métodos, propriedades, eventos ou indexadores.

Uma Interface tem apenas a declaração de membro ou assinatura e, implicitamente, todos os membros de uma interface são públicos e abstratos.

Você define uma interface usando a palavra-chave “Interface” como o exemplo a seguir mostra no Código 1.

Obs: O nome de uma interface deve ser um nome identificador C# válido. Por convenção, os nomes de interface começam com uma letra maiúscula I.

Código 1. Exemplo de uma interface.

Na linguagem C# a sintaxe usada para indicar a utilização de uma interface é colocar dois pontos após o nome da classe concreta que vai implementar a interface seguido do nome da interface, como é mostrado no Código 2.

Código 2. Implementação de uma interface.

Neste exemplo, note que a classe ClassConcreta esta herdando a interface IExemploInterface e deve implementar um método chamado ExemploMetodo() que não tem parâmetros e retorna void. Chamamos isso de herança de interface e , como vemos, temos a implementação do método ExemploMetodo() na classe ClassConcreta.

Para concluir, no método Main() é criado uma referência da classe que implementa a Interface e posteriormente o método ExemploMetodo() é chamado.

Para um exemplo mais completo acessem a documentação do C# e vejam este exemplo, neste link.

Vimos assim, de uma forma simples, como criar e usar interfaces na linguagem C#.

Vejamos a seguir algumas características importantes das interfaces:

  • Uma interface não fornece herança como uma classe ou classe abstrata, ela só declara membros que uma classe de implementação precisa implementar.
  • Uma interface não pode ser instanciada mas pode ser referenciada pelo objeto da classe que a implementa. Além disso, a referência da interface funciona como objeto de referência e se comporta como o objeto.
    No exemplo acima vemos esse comportamento no código:
    IAcesso oAcesso = new Documento();
    IComprimir oComprimir = new Documento();
  • A interface contém somente propriedades, indexadores, métodos, delegates e assinaturas de eventos.
  • Uma interface não pode conter constantes, construtores, variáveis de instância, destrutores, membros estáticos ou interfaces aninhadas.
  • Os membros de uma interface não pode ter qualquer modificador de acesso mesmo público.
  • Implicitamente, cada membro de uma interface é público e abstrato. Além disso, você não tem permissão para especificar os membros de uma interface pública e abstratas ou virtuais.
  • Uma interface pode ser herdada a partir de uma ou mais interfaces.
  • Uma interface pode estender outra interface.
  • Uma classe ou estrutura pode implementar mais de uma interface.
  • Uma classe que implementa uma interface pode marcar qualquer método da interface como virtual e este método pode ser sobrescrito pelas classes derivadas.

Quais os benefícios em usar uma interface ?

Muitas vezes, devido aos prazos cada vez mais curtos, a grande demanda e correria do dia a dia procuramos pelo caminho mais fácil, que aparentemente nos dá menos trabalho no momento, e com isso deixamos de lado as boas práticas criando sistemas ‘quebra-galhos’ que são feitos para funcionar por um curto período (pois mais a frente a gente vai consertar não é mesmo ???) mas acabam se perpetuando e se transformando em um ajuntamento de código sem padrão algum.

Usar interface é uma forma de criar e definir um contrato que ajuda na organização do código.

Um dos pilares da programação orientada a objetos diz: “Programe para uma interface e não para uma implementação.” (Erich Gamma)

Mas afinal o que há de tão vantajoso assim em usar interfaces ?

  • Permitem criar sistemas fracamente acoplados e mais flexível a mudanças (ou resiliente a mudanças). Isto é possível pois ao utilizar interfaces, se houver necessidade, podemos simplesmente mudar a implementação para adaptar a aplicação as mudanças;
  • Os papeis dos desenvolvedores podem ser bem definidos e segregados. Ao usar interfaces o desenvolvedor não tem que se preocupar como ela será implementada, somente tem que conhecer como invocar as funcionalidades definidas. Já os desenvolvedor da interface visual podem começar a definir a interface com o usuário sem ter a implementação concreta da interface permitindo o desenvolvimento paralelo;
  • Programar para interface deixa o código mais flexível, permitindo trocar a implementação de um componente em tempo de execução, pois quando o código depende de uma interface, pode-se decidir em tempo de execução qual a implementação será utilizada;
  • Enquanto as definições da interface não forem alteradas, incluir novos recursos ou re-implementar recursos já existentes decorrentes de mudanças nas regras de negócio não irá ‘quebrar’ o sistema já existente, tornado sua vida útil maior;
  • O código gerado é mais limpo e fácil de manter e entender pois existem uma separação de responsabilidades entre os componentes do sistema como a interface do usuário e as regras de negócio e a camada de acesso aos dados;
  • A realização de testes unitários fica mais fácil e o código ganha mais qualidade;

Sei que pode não ter ficado claro as vantagens de se usar Interfaces, mas ao longo da disciplina vocês verão que o uso desse recurso vai se valer a pena.

Referências

http://www.macoratti.net/14/04/c_intf1.htm

http://www.macoratti.net/11/11/c_intf1.htm

https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/interfaces/

--

--

Gerson Rodrigues Santos
NAVE Recife

Bacharel em Sistemas de Informação, Mestre em ciência da computação, programador por acaso, design sem saber, professor por vocação, e feliz no que faz.