Diferencia de sobrecarga de C # postfix e incremento / decremento de prefijo
La mayoría de las fuentes dicen que la sobrecarga de los operadores ++ y - en c # da como resultado una sobrecarga de ambos, postfix y prefijo a la vez. Pero parece que su comportamiento sigue siendo diferente.
class Counter
{
public Counter(int v = 0)
{
this.v = v;
}
public Counter(Counter c)
{
v = c.v;
}
public int GetValue() { return v; }
public static Counter operator ++(Counter c)
{
c.v++;
return new Counter(c);
}
private int v;
}
class Program
{
public static void Main()
{
Counter c1 = new Counter(1);
Counter c2 = c1++;
Counter c3 = ++c1;
c3++;
System.Console.WriteLine("c1 = {0}", c1.GetValue());
System.Console.WriteLine("c2 = {0}", c2.GetValue());
System.Console.WriteLine("c3 = {0}", c3.GetValue());
}
}
Maravillosamente, aunque sobrecargadooperator ++
Devuelve copia de la clase original, en este ejemplo.c1
yc3
se convierte en referencias al mismo objeto, mientras quec2
apunta a una diferente (c1=4, c2=2, c3=4
aquí). CambiandoCounter c3 = ++c1;
aCounter c3 = c1++;
salidasc1=3, c2=2, c3=4
.
Entonces, ¿cuál es la diferencia exacta entre postfix e incremento / decremento de prefijo y cómo afecta la sobrecarga? ¿Estos operadores actúan de la misma manera para las clases y para los tipos primitivos?