Olá pessoal,
Hoje descobri algo bastante interessante, é possível fazer sobrecarga de operadores tantos unários quanto binários para classes desenvolvidas por nós.
Segue um exemplo alterado por mim que foi retirado do blog onde encontrei o artigo.
Operadores Unários
+ - ! ~ ++ -- true false
Operadores Binários
* / % & | ^ << >> == != > < >= <= + -
Exemplo:
1. Aqui temos a declaração da classe Coordinate.
class Coordinate
{
#region private fields
int x;
int y;
#endregion
#region properties
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
#endregion
#region constructors
public Coordinate(int x, int y)
{
this.x = x;
this.y = y;
}
#endregion
#region methods
public static Coordinate operator +(Coordinate c)
{
return new Coordinate(c.x+1, c.y+1);
}
public static Coordinate operator -(Coordinate c)
{
return new Coordinate(c.x-1, c.y-1);
}
public static Coordinate operator !(Coordinate c)
{
return new Coordinate(-c.x, -c.y);
}
#endregion
}//end class
2. Vamos a um exemplo de sua usabilidade.
Coordinate c1 = new Coordinate(3, 4);
Coordinate c2 = !c1;
3. Assim, c2 será um clone terá os valores contrários de c1, isto é, -3 e -4.
A saída será -3 e -4.
Fontes:
http://www.dotnetpt.com/default.aspx?id=11&artigo=Overloading%20de%20operadores%20em%20CSharp&url=joaoferreira%5Coverloadingoper.htm
http://aspalliance.com/1227_Understanding_Operator_Overloading_in_C.3
[]'s
Leandro Ribeiro
Posted
23-1-2008 16:29
por
Leandro Ribeiro