Sobes.tech
Junior

Usou classes abstratas nos seus projetos?

sobes.tech IA

Resposta da IA

Sim, utilizei-o. As classes abstratas eram usadas para criar estruturas básicas com métodos e propriedades comuns, que depois são herdadas por classes específicas.

// Declaração de uma classe abstrata
public abstract class Shape
{
    // Método abstrato que deve ser implementado nas classes derivadas
    public abstract double GetArea();

    // Método virtual com implementação padrão, que pode ser sobrescrito
    public virtual void Draw()
    {
        Console.WriteLine("Desenhando uma forma.");
    }
}

// Classe concreta que herda de Shape
public class Circle : Shape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    // Implementação do método abstrato
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Sobrescrever o método virtual
    public override void Draw()
    {
        Console.WriteLine($"Desenhando um círculo com raio {Radius}.");
    }
}

Principais cenários de uso:

  • Definição de um contrato geral: As classes abstratas permitem definir um conjunto de métodos e propriedades que devem estar presentes em todas as classes derivadas.
  • Implementação parcial: Possibilidade de fornecer uma implementação parcial da funcionalidade na classe base, evitando duplicação completa do código nas classes filhas.
  • Padrão de projeto: Frequentemente usadas na implementação de padrões, como o "Padrão de método".

Diferenças com interfaces:

Característica Classe abstrata Interface
Herança Herança múltipla não permitida Implementação múltipla permitida
Implementação Pode conter implementação de métodos Até C# 8.0 - apenas declarações, depois - implementação padrão
Membros Pode ter campos, construtores, métodos virtuais/abstratos/ordinários Até C# 8.0 - apenas métodos e propriedades, depois - também membros estáticos e implementações padrão
Estado Pode ter estado (através de campos) Não pode ter estado