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 |