Interfacce in C#

Le interfacce sono dei modelli di classe che non possono essere implementate, ma servono solo per delineare i metodi che la classe che ne deriva deve avere. Se creiamo ad esempio l’interfaccia ICorre, questa può servire per creare le classi di animali che corrono, ma non per le piante. Facciamo un esempio concreto per capire meglio:

using System;
interface IPerimetro
{
  int GetPerimetro();
  int iLato { get; set; }
}

public class CQuadrato : IPerimetro
{
  private int m_iLato;
  public int iLato
  {
    get { return m_iLato; }
    set { m_iLato = value; }
  }

  public int GetPerimetro()
  {
    return m_iLato * 4;
  }
}

public class Corso
{
  static void Main(string[] args)
  {
    CQuadrato cQ = new CQuadrato();
    cQ.iLato = 12;

    Console.WriteLine("Il perimetro del quadrato di lato
	   {0,0:d} è di {1,0:d}", cQ.iLato, cQ.GetPerimetro());

    Console.ReadKey();
  }
}

In questo esempio molto semplice abbiamo descritto l’interfaccia IPerimetro e le abbiamo implementato la classe CQuadrato che può avere un perimetro, un cerchio non può essere derivata da questa interfaccia perché non ha perimetro, ma circonferenza. Da notare solamente il nuovo modo che ho implentato per trattare una proprietà membro privata con i metodi get e set, in pratica con get otteniamo il valore e con set lo impostiamo e per farlo concretamente basta richiamare il nome metodo get, set. Ora aggiungiamo un’altra interfaccia e la chiamiamo IArea:

using System;
interface IPerimetro ....

interface IArea
{
  double GetArea();
  int iLato { get; set; }
}

public class CQuadrato : IPerimetro, IArea
{
  private int m_iLato;
  public int iLato
  { ..... }

  public int GetPerimetro() ....
  public double GetArea()
  {
    return m_iLato * m_iLato;
  }
}

public class CCerchio : IArea
{
  private int m_iRaggio;
  public int iLato
  {
    get { return m_iRaggio; }
    set { m_iRaggio = value; }
  }

  public double GetArea()
  {
    return Math.PI * m_iRaggio * m_iRaggio;
  }
}

public class Corso
{
  ...
  Console.WriteLine("L'area del quadrato di lato
     {0,0:d} è di {1,0:n}", cQ.iLato, cQ.GetArea());

  CCerchio cCer = new CCerchio();
  cCer.iLato = 14;
  Console.WriteLine("L'area del cerchio di raggio
     {0,0:d} è di {1,0:n}", cCer.iLato, cCer.GetArea());
   ...
}

Per risparmiare spazio le istruzioni in comune con l’esempio precedente sono state sostituite con …
Ovviamente anche le interfacce possono essere derivate tra di loro.

<< Lezione Precedente – Inizio CorsoIndice LezioniLezione Successiva >>

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.