Logo UGIdotNET

Definizione degli operatori

C#, come C++, permette di definire gli operatori associati ad uno specifico tipo. E' possibile definire operatori unari, operatori binari, operatori di comparazione e operatori di casting esplicito ed implicito. Per maggiori informazioni consiglio di consultare operator e Overloadable Operators.
Segue un esempio che farà piacere agli appassionati di matematica: una definizione abbozzata della classe del Numero Complesso dove è interessante poter definire alcuni operatori.

public class ComplexNumber{
  double Re; //parte reale
  double Im; //parte immaginaria

  public ComplexNumber(double r, double i){
    Re = r;
    Im = i;
  }

  //Definizione dell'operatore somma di due numeri complessi:
  //i membri di definizione degli operatori devono essere public e static.
  public static ComplexNumber operator + (ComplexNumber a, ComplexNumber b) {
    return new ComplexNumber(a.Re + b.Re, a.Im + b.Im);
  }

  //E' possibile avere più overload dello stesso operatore.
  //Qui la somma tra un numero complesso e un double.
  public static ComplexNumber operator + (ComplexNumber a, double b) {
    return new ComplexNumber(a.Re + b, a.Im);
  }

  // ...

  //Stringa che rappresenta il numero complesso.
  public override string ToString(){
    return string.Format("{0}{1:+0;-0;+0}i", Re, Im);
  }
}

// ...due righe di test...
ComplexNumber a = new ComplexNumber(1,2);

System.console.WriteLine(a + a); //-> 2+4i
System.console.WriteLine(a + 1); //-> 2+2i

E' necessario definire gli operatori? Certo che no, ma a volte definirli aiuta la leggibilità del codice... come nell'esempio!

Autore: Marco Barzaghi
Data: 12 maggio 2003
Ultimo aggiornamento: 23 luglio 2004
Categorie:  Varie

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185