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 |