Diferença entre classe abstrata e interface em c #

Classe abstrata

Uma classe abstrata é aquela que se destina apenas a ser uma classe base de outras classes. O modificador 'abstract' é usado para tornar uma classe abstrata. Um modificador abstrato indica que há alguma implementação ausente que precisa ser implementada na classe derivada dela. A classe abstrata pode ter membros abstratos e não abstratos. Uma classe abstrata deve ter pelo menos um método abstrato, caso contrário, não há como declarar essa classe como 'abstrata'.

Exemplo de classe abstrata em C #:
Conforme mostrado no exemplo acima, o método abstrato 'Area' dentro da classe MyCircle é substituído na classe derivada MyArea.

Interface

Uma interface contém apenas a declaração de membros, incluindo métodos, propriedades, eventos ou indexadores. Não contém a implementação desses membros. Uma classe ou estrutura implementa a interface, deve fornecer a definição dos métodos declarados na interface. Isso significa que uma interface fornece uma estrutura padrão que a classe derivada precisa seguir.

Exemplo de uma interface em C #:
Como mostrado no exemplo acima, a interface MyData possui dois métodos de declaração, getdata () e showdata (). A classe NameData que está implementando essa interface deve fornecer a definição de métodos declarados na interface MyData.

Diferença entre classe abstrata e interface

  1. Uma classe abstrata pode ter membros abstratos e não abstratos. Mas, em uma interface, todos os membros são implicitamente abstratos e devem ser substituídos na classe derivada.
  2. Uma classe pode herdar várias interfaces, mas apenas uma classe abstrata.
  3. Uma classe abstrata pode conter métodos com ou com uma definição. Mas, uma interface pode conter apenas assinatura de método.
  4. Uma classe abstrata pode totalmente, parcialmente ou não ser implementada, mas uma interface deve ser totalmente implementada, ou seja, todos os membros devem ser definidos na classe derivada.
  5. Uma interface não pode conter modificadores de acesso, mas uma classe abstrata pode tê-la para funções, propriedades ou eventos.