Categories: C# (sharp)

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 >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

3 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

4 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

7 giorni ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

1 settimana ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago