Ich habe Probleme beim Versuch, den Post-Inkrement-Operator in C# zu überladen. Mit Ganzzahlen erhalten wir die folgenden Ergebnisse.
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
Aber wenn ich es mit Klassen versuche, sieht es so aus, als ob die Objekte ausgetauscht werden.
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"
}
}
Beim Debuggen der Anwendung gibt die überladene Operator-Methode das neue Objekt mit dem alten Wert (10) und das Objekt, das als Referenz übergeben wurde, mit dem neuen Wert (11) zurück, aber schließlich werden die Objekte ausgetauscht. Warum geschieht dies?