Tengo problemas para intentar sobrecargar el operador de incremento de puesto en C#. Usando enteros obtenemos los siguientes resultados.Sobrecarga del operador posterior al incremento
int n;
n = 10;
Console.WriteLine(n); // 10
Console.WriteLine(n++); // 10
Console.WriteLine(n); // 11
n = 10;
Console.WriteLine(n); // 10
Console.WriteLine(++n); // 11
Console.WriteLine(n); // 11
Pero, cuando intento usar clases, parece que los objetos se intercambian.
class Account
{
public int Balance { get; set; }
public string Name { get; set; }
public Account(string name, int balance)
{
Balance = balance;
Name = name;
}
public override string ToString()
{
return Name + " " + Balance.ToString();
}
public static Account operator ++(Account a)
{
Account b = new Account("operator ++", a.Balance);
a.Balance += 1;
return b;
}
public static void Main()
{
Account a = new Account("original", 10);
Console.WriteLine(a); // "original 10"
Account b = a++;
Console.WriteLine(b); // "original 11", expected "operator ++ 10"
Console.WriteLine(a); // "operator ++ 10", expected "original 11"
}
}
Depuración de la aplicación, el método operador sobrecargado, devuelve el nuevo objeto con el valor antiguo (10) y el objeto que se ha pasado por referencia, tiene el nuevo valor (11), pero finalmente los objetos se intercambiado. ¿Por qué está pasando esto?
No debe modificar la pregunta después de la respuesta , es confuso para las próximas personas que lo miran. – RedGlyph
posible duplicado de [¿Cuál es la diferencia entre X = X ++; vs X ++ ;?] (http://stackoverflow.com/questions/226002/whats-the-difference-between-xx-vs-x) – nawfal