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!