Diferença entre classe abstrata e interface em C# (com tabela)

When designing applications or starting a programming career, it is necessary to know the difference between Abstract Class and Interface in C#. Both abstract class and interface are used to accomplish abstraction where one can understand the abstract methods. Though they both can’t be used at the same time.

Classes e interfaces abstratas podem parecer semelhantes em alguns aspectos, mas existem diferenças importantes que ajudam a determinar qual é a melhor escolha para alguém atingir um determinado objetivo relacionado à programação.

One should not ever intend to use an Abstract class directly. This class must have one abstract method at the very least. And it will be marked by the keyword or modifier abstract in the definition of class. On the other hand, an interface only allows someone to define functionality. It cannot be implemented. Although a class can develop only one abstract class, it can also take advantage of various interfaces.

Classe abstrata vs interface em C#

o difference between Abstract Class and Interface in C# is that the “Main” function of abstract class is to explain the real identity of a class whereas the main function of an interface is to explain a class’s outer possibilities. Full abstraction is not provided by an abstract class whereas an interface can provide full abstraction.

Multiple inheritance is not possible in an abstract class whereas an interface can make multiple inheritance as possible.

Comparison Table Between Abstract Class and Interface in C#

Parâmetro de ComparaçãoClasse AbstrataInterface em C#
FuncionalidadeAdicionar um novo método a uma classe abstrata dará a opção de fornecer a implementação padrão e assim todo o código atual funcionará corretamenteAdicionar um novo método a uma interface permitirá rastrear todas as implementações da interface e definir a implementação para o método recente
Várias herançasApenas uma classe abstrata pode ser herdada por uma classeVárias interfaces podem ser herdadas por uma classe
O que eles contêm?A classe abstrata contém membros de dados e construtoresUma interface em C# não contém membros de dados e construtores
ProvidenciarUma classe abstrata pode fornecer código padrão completo e / ou os detalhes que devem ser substituídosUma interface em C# não é capaz de fornecer nenhum código, apenas a assinatura
Taxa de movimentoUma classe abstrata é rápida quando se trata de velocidadeUma interface em C# precisa de mais tempo para obter o método real nas classes correspondentes

O que é classe abstrata em C#?

An abstract class is something that can be intended only to be a base class of other classes. They are classes that have one or more abstract methods. An abstract method is known as a method that is announced, but it doesn’t contain any implementation.

To create a class, we need to use an ‘abstract’ modifier. This modifier indicates that there might be few missing implementations that will require to put into action in the class taken from it. Both abstract and non-abstract members can be contained by an abstract class.

This abstract class should have one abstract method at the very least which has already been discussed above. Without the method, we cannot declare that class as an “abstract” one.

Sometimes abstract classes might not be instantiated, and they need subclasses to provide implementations for the abstract methods. If we are creating an abstract class then we are creating a base class that might contain one or more completed methods but we will at least find one or more methods that are left uncompleted and declared abstract.

If all the methods of an abstract class stay uncompleted then it will just like be an interface. To deliver a definition of a base class for how a set of derived classes will work and then let the programmers fill the implementation in the derived classes is the actual purpose of an abstract class.

Também podemos dizer que o propósito de uma classe abstrata é fornecer uma definição de classe base.

O que é interface em C#?

On the other hand, an interface is not a class that has only an indication of functionality. We can call it a pattern with no implementation. Theoretically, it is only a definition of methods that has the declaration of members.

We can think of it as an empty shell that does not contain the implementation of its members. The interface is like an abstract base class that will only have abstract members such as methods, indexers, events, properties, etc.

Instantiating it straightly is not possible and its members can be implemented by any class. Also, various interfaces can be implemented by a class, nonetheless, a class can only obtain a single class. In other words, we can say that an interface has only the declaration of members and it doesn’t contain the implementation of these members.

Uma classe implementa a interface e deve fornecer a definição dos métodos declarados na interface. O que significa que uma interface traz uma estrutura padrão que a classe derivada precisará seguir.

Principais diferenças entre classe abstrata e interface em C#

  1. Uma classe abstrata é conhecida como um certo tipo de classe que pode conter uma explicação sem implementação. Por outro lado, uma interface é apenas um padrão que não é capaz de fazer nada. Então, tecnicamente, é apenas uma concha, que está vazia.
  2. Uma classe pode usar apenas uma classe abstrata, portanto, mais de uma herança não é suportada. Por outro lado, uma herança pode suportar várias heranças, o que significa que uma classe pode herdar qualquer número de heranças.
  3. Uma classe abstrata pode conter alguns modificadores de acesso, como subs, funções, propriedades, etc. Embora uma interface não tenha permissão para conter modificadores de acesso, todos os métodos devem ser inevitavelmente definidos como públicos.
  4. Uma classe abstrata tende a atuar como uma classe base para todas as outras classes, portanto, é capaz de declarar ou usar qualquer variável, enquanto uma interface não tem permissão para declarar nenhuma.
  5. Uma classe abstrata tende a usar a si mesma para definir a identidade principal de uma classe e pode ser usada para objetos de um tipo de data semelhante. E uma interface é usada para definir a capacidade periférica de uma classe.

Perguntas frequentes (FAQ) sobre classe abstrata e interface em C#

Qual é o uso da classe abstrata em C#?

C# é uma linguagem de programação orientada a objetos de uso geral. É da Microsoft. O objetivo principal do C# é usar o poder de computação do C ++ com a facilidade de programação do Virtual Basic.
É baseado principalmente em C ++ e também contém recursos semelhantes ao Java.

An abstract class is a way to achieve abstraction in C# and it cannot be directly instantiated. The function of the abstract class is to create some functionality or create a common behavior that subclasses can inherit, implement or override.

Ele basicamente fornece um blueprint para as classes derivadas e fornece instruções sobre o que implementar pelas classes derivadas quando uma classe abstrata é herdada por elas.

O que é interface em C# e por que ela é usada?

An interface in C# can be defined as a type definition like a class. But it only provides declarations and is inherited by classes and structs.

It is used with a class to define a contract (an agreement on what is provided by the class to an application). It only declares the methods and different properties and a class will dictate what the method will actually do.

Não pode ser instanciado como um objeto e é usado apenas como uma coleção de métodos e declarações de propriedade. Ele define quais operações podem ser ou serão realizadas por uma classe.

O que é polimorfismo em C#?

Polymorphism is usually expressed as one interface and multiple functions. Polymorphism in C# means providing the ability to take multiple forms. After encapsulation and inheritance, it is another pillar concept of object-oriented programming. C# provides the ability to classes of implementing different methods which are usually called with the same name.

Existem dois tipos de polimorfismos em C#:

  1. Polimorfismo de tempo de compilação - Significa definir vários métodos com parâmetros diferentes, mas com o mesmo nome. Ele nos permite usar o mesmo nome de método para realizar várias tarefas apenas passando parâmetros diferentes.
  2. Polimorfismo de tempo de execução - Significa criar uma função semelhante na classe derivada para substituir um método da classe base. Neste método, podemos criar um método com o mesmo nome e parâmetros para realizar diferentes tarefas.

Conclusão

To understand the difference between the two is quite a difficult task. We can combine all the information we can find and still it won’t be enough. Theoretically speaking, both of them are the most important terms in programming and are pretty similar, yet in terms of functionality, they differ a lot.

Embora uma classe abstrata seja um certo tipo de classe que funcionará como base para outras classes, uma interface será apenas um shell vazio com apenas declarações de membro.

Referências

  1. https://csharp.net-tutorials.com/classes/abstract-classes/
  2. https://dl.acm.org/doi/abs/10.1145/512035.512041