How to: Overloading degli operatori
Scritto da
Antonio Pierascenzi il
lunedì 18 ottobre 2010
•
Linguaggio:
•
A volte si ha la necessità di ridefinire i comportamenti di una
determinata operazione che il framework ci fornisce nativamente per
le nostre classi, pensiamo ad esempio al metodo ToString()
che applicato a tutte le classi che costruiamo ci restituisce, se
richiamato, la stringa contenente il nome del tipo creato.
Inoltre si potrebbe avere bisogno di sommare quantità,
moltiplicarle, applicare comparazioni logiche, insomma cose che
solitamente si hanno spesso a disposizione nativamente per gli
oggetti definiti nel framework ma non a disposizione nei nostri
oggetti, se non definendo noi metodi adatti allo scopo.
Un modo più elegante di ottenere lo scopo è tramite l'overloading
degli operatori, funzionalità messa a disposizione degli
sviluppatori C# fin dalla prima versione del framework.Come sempre
un esempio è meglio di tante parole.
Supponiamo di avere una classe Position così definita:
public class Position
{
public double X, Y, Z;
public Position(double x, double y, double z)
{
X = x;
Y = y;
Z = z;
}
public Position(Position xyz)
{
X = xyz.X;
Y = xyz.Y;
Z = xyz.Z;
}
public override string ToString()
{
return "Valore x:" + X + "\n Valore y:" + Y + "\n Valore z:" + Z;
}
public static Position operator +(Position xyz, Position abc)
{
var newPosition = new Position(xyz);
newPosition.X += abc.X;
newPosition.Y += abc.Y;
newPosition.Z += abc.Z;
return newPosition;
}
}
Come si può vedere la sintassi dell'overloading degli operatori
è simile alla definizione di un metodo pubblico statico con
l'aggiunta della sola keyword "operator" che
comunica al compilatore che si sta definendo l'overload per
un operatore, in questo caso "+".
Utilizzo:
Position pos1, pos2, pos3;
pos1 = new Position(3.0,4.0,5.0);
pos2 = new Position(2.0, 1.5, 2.5);
pos3 = pos1 + pos2;
Console.WriteLine("Position 1:\n" + pos1.ToString());
Console.WriteLine("Position 2:\n" + pos2.ToString());
Console.WriteLine("Position 3:\n" + pos3.ToString());
Come sempre per maggiori dettagli su quali operatori è possibile
effettuare l'overload riferirsi alla
documentazione su MSDN.
Tags: Overloading,operatori