Sobes.tech
Junior

Ați folosit clase abstracte în proiectele dvs.?

sobes.tech AI

Răspuns de la AI

Da, am folosit. Clasele abstracte erau folosite pentru a crea structuri de bază cu metode și proprietăți comune, care sunt apoi moștenite de clase specifice.

// Declarație de clasă abstractă
public abstract class Shape
{
    // Metodă abstractă care trebuie implementată în clasele derivate
    public abstract double GetArea();

    // Metodă virtuală cu implementare implicită, care poate fi suprascrisă
    public virtual void Draw()
    {
        Console.WriteLine("Desenează o formă.");
    }
}

// Clasă concretă care moștenește de la Shape
public class Circle : Shape
{
    public double Radius { get; set; }

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

    // Implementarea metodei abstracte
    public override double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    // Suprascrierea metodei virtuale
    public override void Draw()
    {
        Console.WriteLine($"Desenează un cerc cu raza {Radius}.");
    }
}

Scenarii principale de utilizare:

  • Definirea unui contract general: Clasele abstracte permit stabilirea unui set de metode și proprietăți care trebuie să fie prezente în toate clasele derivate.
  • Implementare parțială: Posibilitatea de a oferi o implementare parțială a funcționalității în clasa de bază, evitând duplicarea completă a codului în clasele derivate.
  • Model de proiectare: Sunt frecvent utilizate în implementarea modelelor, cum ar fi "Template Method".

Diferențe față de interfețe:

Caracteristică Clasă abstractă Interfață
Moștenire Moștenire multiplă interzisă Implementare multiplă permisă
Implementare Poate conține implementări de metode Până la C# 8.0 - doar declarații, după - implementări implicite
Membri Poate avea câmpuri, constructori, metode virtuale/abstracte/obișnuite Până la C# 8.0 - doar metode și proprietăți, după - și membri statici și implementări implicite
Stare Poate avea stare (prin câmpuri) Nu poate avea stare