Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le classi astratte

Cosa sono e come si definiscono le classi astratte con C#
Cosa sono e come si definiscono le classi astratte con C#
Link copiato negli appunti

Una classe astratta è un tipo particolare di classe di cui non si può creare una istanza con la parola chiave «new». Per essere utilizzata, infatti, deve essere obbligatoriamente ereditata. Mostriamo subito un esempio di classe astratta, partendo dal quale introdurremo una serie di importanti concetti:

public abstract class Figura
{
  protected string mNome;
  protected int mNumeroLati;

  public Figura(string Nome, int NumeroLati)
  {
    mNome = Nome;
    mNumeroLati = NumeroLati;
  }

  public string Nome
  {
    get { return mNome; }
  }

  public int NumeroLati {
    get { return mNumeroLati; }
  }

  public abstract double Perimetro { get; }
  public abstract double Area { get; }
  public abstract void Disegna();
}

Una classe astratta si dichiara con la parola chiave «abstract». Al suo interno possono essere definite variabili, metodi e proprietà, proprio come abbiamo fatto finora (nell'esempio sopra riportato, le variabili mNome e mNumeroLati, il costruttore, e le proprietà Nome e NumeroLati).

Oltre a ciò, è possibile dichiarare un'altra serie di metodi e proprietà che devono essere obbligatoriamente implementate dalle classi che ereditano da essa: i cosiddetti metodi e proprietà astratti.

Nel nostro caso, la classe che eredita da Figura deve fornire una implementazione delle proprietà Perimetro e Area (dalla definizione si comprende che saranno di sola lettura, se fossero state di lettura/scrittura avremmo avuto get; set;) e del metodo Disegna.

La classe Quadrato eredita correttamente da Figura:

public class Quadrato : Figura
{
  private double mLato;

  public Quadrato(int Lato) : base("Quadrato", 4)
  {
    mLato = Lato;
  }

  public override double Perimetro
  {
    get { return mLato * 4; }
  }

  public override double Area
  {
    get { return mLato * mLato; }
  }

  public override void Disegna()
  {
    //...
  }
}

Figura è la classe che racchiude le caratteristiche comuni ad ogni figura geometrica. La definizione fornita obbliga tutte le classi che ereditano da essa a ridefinire i metodi e le proprietà dichiarati abstract, altrimenti in fase di compilazione si otterrà un messaggio di errore in quanto alla dichiarazione del metodo non corrisponde nessuna azione concreta: nessun codice da eseguire.

Ad esempio, eliminando il metodo Disegna dalla classe Quadrato, la compilazione fallisce segnalando che 'Quadrato' non implementa il metodo astratto ereditato Figura.Disegna().

Per le classi astratte valgono le stesse considerazioni fatte a proposito dell'ereditarietà, ovvero se un metodo richiede una classe astratta come argomento, al suo posto potrà essere utilizzata una qualunque classe che eredita da essa.

In VB.NET una classe astratta si dichiara con MustInherit e un metodo astratto con MustOverride.

Fare clic qui per scaricare l'esempio che abbiamo realizzato; nel file ZIP è disponibile anche la classe triangolo.

Ti consigliamo anche