Classe abstrata vs. Interface [C#]
1. Finalidade:
- Classes abstratas: servem como base para outras classes herdarem, definindo suas características e comportamentos fundamentais (i.e. definem a identidade central de uma classe);
- Interfaces: definem um contrato que as classes devem implementar, garantindo a implementação de determinados métodos (i.e. implementam comportamentos periféricos).
2. Nível de abstração:
- Classes abstratas: podem incluir membros abstratos e não abstratos;
- Interfaces: possuem apenas membros abstratos.
3. Modificadores de acesso:
- Classes abstratas: aceitam diferentes modificadores de acesso (public, private, protected);
- Interfaces: todos os membros são public por padrão.
4. Herança e implementação:
- Classes abstratas: uma classe pode herdar de apenas uma classe abstrata;
- Interfaces: uma classe pode implementar múltiplas interfaces.
Referências:
- https://www.geeksforgeeks.org/difference-between-abstract-class-and-interface-in-c-sharp/
- https://www.bytehide.com/blog/abstract-class-vs-interface-csharp