Junior
Hai usato classi astratte nei tuoi progetti?
sobes.tech AI
Risposta dell'AI
Sì, l'ho usato. Le classi astratte venivano utilizzate per creare strutture di base con metodi e proprietà comuni, che poi vengono ereditate da classi specifiche.
// Dichiarazione di una classe astratta
public abstract class Shape
{
// Metodo astratto che deve essere implementato nelle classi derivate
public abstract double GetArea();
// Metodo virtuale con implementazione di default, che può essere sovrascritto
public virtual void Draw()
{
Console.WriteLine("Disegnare una forma.");
}
}
// Classe concreta che eredita da Shape
public class Circle : Shape
{
public double Radius { get; set; }
public Circle(double radius)
{
Radius = radius;
}
// Implementazione del metodo astratto
public override double GetArea()
{
return Math.PI * Radius * Radius;
}
// Sovrascrittura del metodo virtuale
public override void Draw()
{
Console.WriteLine($"Disegnare un cerchio con raggio {Radius}.");
}
}
Principali scenari di utilizzo:
- Definizione di un contratto generale: Le classi astratte permettono di definire un insieme di metodi e proprietà che devono essere presenti in tutte le classi derivate.
- Implementazione parziale: Possibilità di fornire un'implementazione parziale della funzionalità nella classe base, evitando duplicazioni complete del codice nelle classi figlie.
- Pattern di progettazione: Spesso utilizzate nell'implementazione di pattern come il "Template Method".
Differenze con le interfacce:
| Caratteristica | Classe astratta | Interfaccia |
|---|---|---|
| Eredità | Eredità multipla non consentita | Implementazione multipla consentita |
| Implementazione | Può contenere implementazioni di metodi | Fino a C# 8.0 - solo dichiarazioni, dopo - implementazioni di default |
| Membri | Può avere campi, costruttori, metodi virtuali/astratti/ordinari | Fino a C# 8.0 - solo metodi e proprietà, dopo - anche membri statici e implementazioni di default |
| Stato | Può avere stato (tramite campi) | Non può avere stato |