Diferença entre classe abstrata e interface em c #

Uma classe abstrata se parece muito com uma interface, mas o conceito é um pouco confuso para os iniciantes em OOP. Conceitualmente, uma classe abstrata se parece com uma interface, é claro, sem nenhuma implementação, mas elas têm seu quinhão de diferenças. Enquanto uma classe abstrata pode ser implementada parcial ou totalmente, uma interface deve ser implementada completamente. Bem, a diferença mais notável entre os dois é que uma classe abstrata pode ter implementação padrão, enquanto uma interface é apenas a definição de métodos que contém apenas as declarações dos membros. Vamos discutir os aspectos teóricos de ambos em detalhes.

O que é uma classe abstrata?

Uma classe abstrata é um tipo especial de classe que atua como base de outras classes e não pode ser instanciada. A lógica de implementação de uma classe abstrata é fornecida por suas classes derivadas. Para tornar uma classe abstrata, o modificador "abstract" é usado, o que significa que algumas implementações ausentes precisam ser implementadas na classe derivada. Ele contém membros abstratos e não abstratos. Uma classe abstrata destina-se a fornecer funcionalidades básicas que podem ser compartilhadas e substituídas por várias classes derivadas. É útil evitar qualquer tipo de duplicação de código. Eles se parecem muito com interfaces, mas com funcionalidade adicional.

O que é uma interface?

Uma interface, por outro lado, não é uma classe que contém apenas a assinatura da funcionalidade. É um padrão sem implementação. Conceitualmente falando, é apenas a definição de métodos que contém apenas a declaração de membros. É um shell vazio que não contém a implementação de seus membros. É como uma classe base abstrata que contém apenas membros abstratos, como métodos, eventos, indexadores, propriedades etc. Não pode ser instanciada diretamente e seus membros podem ser implementados por qualquer classe. Além disso, várias interfaces podem ser implementadas por uma classe, no entanto, uma classe só pode herdar uma única classe.

Classe abstrata versus interface: diferença entre classe abstrata e interface em c #

  1. Herança múltipla - Uma classe pode usar apenas uma classe abstrata, portanto, a herança múltipla não é suportada. Uma interface, por outro lado, pode suportar várias heranças, o que significa que uma classe pode herdar qualquer número de heranças..
  2. Definição  do Classe abstrata e interface em C #- Uma classe abstrata é um tipo especial de classe que pode conter definição sem implementação. A lógica de implementação é fornecida por suas classes derivadas. Pode ter métodos abstratos e não abstratos. Uma interface, por outro lado, é apenas um padrão que não pode fazer nada. Tecnicamente, é apenas uma concha vazia.
  3. Implementação - Uma classe abstrata pode conter tanto a definição quanto sua implementação. É uma classe incompleta que não pode ser instanciada. Uma interface pode ter apenas a assinatura da funcionalidade sem nenhum código.
  4.  Modificadores de acesso - Uma classe abstrata pode ter vários modificadores de acesso, como subs, funções, propriedades, etc., enquanto uma interface não pode ter modificadores de acesso e todos os métodos devem ser implicitamente definidos como públicos.
  5. Homogeneidade - Uma classe abstrata é usada para implementações do mesmo tipo, comportamento e status, enquanto uma interface é usada para implementações que compartilham apenas assinaturas de métodos.
  6. Declaração - Uma classe abstrata atua como uma classe base para todas as outras classes, para que possa declarar ou usar qualquer variável enquanto uma interface não puder declarar nenhuma variável.
  7. Declaração do construtor - Enquanto uma classe abstrata pode ter declaração de construtor, uma interface não pode ter declaração de construtor.
  8. Núcleo vs. Periférico - Uma classe abstrata é usada para definir a identidade principal de uma classe e pode ser usada para objetos do mesmo tipo de dados. Uma interface, por outro lado, é usada para definir a capacidade periférica de uma classe.
  9. Rígido vs. Flexível - Uma classe abstrata é mais flexível em termos de funcionalidade, pelo menos da perspectiva de um desenvolvedor, enquanto uma interface é mais rígida.

Classe abstrata versus interface: formulário de tabela

Classe abstrata

Interface

Uma classe abstrata pode ter todos os modificadores de acesso para declaração de membro de funções, subs e propriedades. Uma interface não pode ter modificadores de acesso para declaração de funções, subs, propriedades etc. Todos os membros são assumidos como implicitamente públicos.
Uma classe pode usar no máximo apenas uma classe abstrata. Uma classe pode herdar qualquer número de interfaces.
Herança múltipla não é suportada na classe abstrata. Uma interface pode suportar herança múltipla.
Tecnicamente, é uma classe que pode ou não conter tanto a definição quanto sua implementação. Uma interface só pode ter a assinatura da funcionalidade, então é basicamente um shell vazio.
Uma classe abstrata pode conter membros. consts, métodos definidos e stubs de métodos. Uma interface pode conter apenas métodos e consts.
Ele define a identidade principal de uma classe e é usado para descrever objetos do mesmo tipo de dados. É usado para descrever as habilidades periféricas de uma classe.
Membros de uma classe abstrata não podem ser estáticos, a menos que seja um Membro Completo. Membros de uma interface não podem ser estáticos.
É ideal para implementações do mesmo tipo e comportamento comum. É melhor usar interfaces se várias implementações compartilharem apenas assinaturas de métodos.
Pode ter declaração de construtor. Não pode ter declaração de construtor.
Uma classe abstrata possui campos e restrições predefinidos. Os campos não podem ser definidos nas interfaces.
Pode ter métodos abstratos e não abstratos. Só pode ter métodos abstratos.

Sumário

Qual é a diferença entre uma classe abstrata e uma interface? Essa é provavelmente uma das perguntas mais comuns feitas em qualquer entrevista técnica. É provável que você encontre uma infinidade de informações sobre classes e interfaces abstratas em qualquer tutorial em C #, no entanto, entender a diferença entre as duas é a parte mais difícil. Você pode consolidar todas as informações que encontrar e ainda não conseguir o suficiente. Bem, conceitualmente, ambos são os termos mais importantes em programação e são os mesmos, no entanto, diferem bastante em termos de funcionalidade. Enquanto uma classe abstrata é um tipo especial de classe que atua como base para outras classes, uma interface, por outro lado, é apenas um shell vazio com apenas declarações de membros.