Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Interface X Classe Abstrata

Olá povo. Tenho uma dúvida persistente em relação a utilidade e similaridade da utilização de um Interface e uma Classe Abstrata em C#. Aqui vão elas:

  1. A interface serve mesmo somente para "obrigar" o dev à implementar todos os métodos necessários para o pleno funcionamento da classe?
  2. Em termos de codificação mesmo (hands-on) a utilização de uma Interface e uma Classe Abstrata é o mesmo? Implementação de métodos e propriedades não definidas?
  3. Em que situação devo criar um Interface e não uma classe abstrata? E o inverso?

Muito abrigado pelo auxílio pessoal.

Abraços e boas aulas!

2 respostas
solução!

Olá Eduarda, tudo bem?

Teoricamente uma interface é uma classe abstrata sem implementações, que obriga as classes que a implementam a explicitarem um código. Mas ainda tem algumas diferenças.

Cada classe só pode herdar de uma classe (abstrata ou não), mas pode implementar várias interfaces. Com interfaces é possível criar pequenas "exigências" para quem a implementam, então se a classe em questão deve ter várias exigencias, elas podem ser divididas em várias outras interfaces para serem reusadas apenas onde faz sentido.

Classes abstratas devem ser usadas apenas quando as classes filhas devem ter todas as características em comum a essa classe mãe, por exemplo, uma caneta tem corpo, e você pode escrever. A caneta esferográfica tem carga, tem cor, tampa, grossura dada ponta. Uma caneta tipo pena tem um tinteiro, você pode recarregar. Uma canetinha pode secar se não ficar tampada. No entanto todas elas tem um corpo e você pode escrever. (Sim, não foi o melhor dos exemplos, mas a ideia é mesmo mostrar o compartilhamento de características)

As interfaces tendem a serem mais estáveis com menos mudanças, afinal não tem implementação para mudar, o código que pode mudar é na própia classe que implementa a interface. Nesta altura do curso você já viu a parte do polimorfismo onde você pode definir um tipo mais genérico como retorno de função. Com interfaces é possível utilizar qualquer tipo que implemente essa interface definida como retorno. Um exemplo é utilizando a interface IEnumerable como retorno, você pode retornar um Array, List, HashSet ou qualquer outro tipo que implemente essa interface, e isso te dá algumas possibilidades, mesmo apenas utilizando a biblioteca padrão do .Net.

O desenvolvimento web faz grande uso de interfaces e no decorrer dos cursos ficará mais clara essa "preferência" pelo uso de interfaces ao invés das classes abstratas.

Espero ter ajudado!

Muito completa sua resposta Fabiano... Muito obrigado!!!