Categories: C# (sharp)

Overloading degli Operatori in C#

Una caratteristica estremamente potente ed utile di alcuni linguaggi come il C++ o lo stesso C# è l’overloading degli operatori, quindi avere la possibilità di inserire qualsiasi istruzione nelle operazioni di classi definite dall’utente. Come sempre vediamo di capire come funzionano tramite un esempio esplicativo.

using System;
public class CCerchio
{
  private double m_dRaggio;
  public CCerchio() { m_dRaggio = 0.0; }
  public CCerchio(double dRaggio) { m_dRaggio = dRaggio; }
  public double Raggio
  {
    get { return m_dRaggio; }
    set { m_dRaggio = value; }
  }

  public double Area
  {
    get { return Math.PI * Math.Pow(m_dRaggio, 2.0); }
    set { m_dRaggio = Math.Sqrt(value / Math.PI); }
  }

  public double Circonferenza
  {
    get { return 2 * Math.PI * m_dRaggio; }
    set { m_dRaggio = value / (2 * Math.PI); }
  }

  public static CCerchio operator+( CCerchio c1, CCerchio c2)
  {
    double dSumRaggio = c1.m_dRaggio + c2.m_dRaggio;
    return new CCerchio(dSumRaggio);
  }

  public static CCerchio operator-(CCerchio c1, CCerchio c2)
  {
    double dSumRaggio = c1.m_dRaggio - c2.m_dRaggio;
    return new CCerchio(dSumRaggio);
  }
}

public class Corso
{
  static void Main(string[] args)
  {
    CCerchio c1 = new CCerchio(12.76);
    CCerchio c2 = new CCerchio();
    c2.Area = 762.2;
    Console.WriteLine("La circonferenza del cerchio di raggio
    {0,0:n} è di {1,0:n}", c1.Raggio, c1.Circonferenza);
    Console.WriteLine("La circonferenza del cerchio di raggio
    {0,0:n} è di {1,0:n}", c2.Raggio, c2.Circonferenza);
    Console.WriteLine("Il raggio risultante dal cerchio di raggio
    {0,0:n} e raggio {1,0:n} è {2,0:n}", c1.Raggio,
    c2.Raggio, (c1+c2).Raggio);
    Console.WriteLine("La circonferenza risultante dal cerchio di raggio
    {0,0:n} e raggio {1,0:n} è {2,0:n}", c1.Raggio, c2.Raggio,
    (c1+c2).Circonferenza);
    Console.WriteLine("L'area risultante dal cerchio di raggio
    {0,0:n} e raggio {1,0:n} è {2,0:n}", c1.Raggio, c2.Raggio,
    (c1+c2).Area);

 Console.ReadKey();
  }
}

Come si vede da questo esempio l’overloading degli operatori si definisce con una semplice funzione pubblica e statica e nel nostro caso ritorna un nuovo oggetto di tipo cerchio, ma poteva ritornare altri tipi. Notate da subito la potenza di un simile approccio! Poter avere un risultato per ogni nostro oggetto tramite dei semplici operatori, quindi il codice risulta chiaro e concentrato. Parleremo delle funzioni statiche nella prossima lezione, ma dovete solo sapere che sono dei metodi o anche proprietà che risiedono in memoria per tutto il corso del programma e quindi si possono richiamare senza bisogno di istanziare l’oggetto, ma ovviamente occorre farne un uso equilibrato per non occupare troppa memoria RAM del computer.

<< Lezione Precedente – Inizio CorsoIndice LezioniLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

Un Abbonamento per Tutti i Software

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

1 anno ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

1 anno ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

4 anni ago