Sobes.tech
Junior

¿Has utilizado clases abstractas en tus proyectos?

sobes.tech AI

Respuesta de la IA

Sí, lo he utilizado. Las clases abstractas se empleaban para crear estructuras básicas con métodos y propiedades comunes, que luego son heredadas por clases específicas.

// Declaración de una clase abstracta
public abstract class Shape
{
    // Método abstracto que debe ser implementado en las clases derivadas
    public abstract double GetArea();

    // Método virtual con implementación por defecto, que puede ser sobreescrito
    public virtual void Draw()
    {
        Console.WriteLine("Dibujando una forma.");
    }
}

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

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

    // Implementación del método abstracto
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Sobrescribir el método virtual
    public override void Draw()
    {
        Console.WriteLine($"Dibujando un círculo con radio {Radius}.");
    }
}

Principales escenarios de uso:

  • Definición de un contrato general: Las clases abstractas permiten definir un conjunto de métodos y propiedades que deben estar presentes en todas las clases derivadas.
  • Implementación parcial: Posibilidad de proporcionar una implementación parcial de la funcionalidad en la clase base, evitando duplicación completa del código en las clases hijas.
  • Patrón de diseño: Frecuentemente se usan en la implementación de patrones, como el "Patrón de método".

Diferencias con las interfaces:

Característica Clase abstracta Interfaz
Herencia Herencia múltiple no permitida Implementación múltiple permitida
Implementación Puede contener implementación de métodos Hasta C# 8.0 - solo declaraciones, después - implementación por defecto
Miembros Puede tener campos, constructores, métodos virtuales/abstractos/ordinarios Hasta C# 8.0 - solo métodos y propiedades, después - también miembros estáticos y implementaciones por defecto
Estado Puede tener estado (a través de campos) No puede tener estado