C#でポストインクリメント演算子のオーバーロードに問題があります。整数を使用すると、次の結果が得られます。ポストインクリメント演算子オーバーロード
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
しかし、クラスを使用して試してみると、オブジェクトが交換されているように見えます。古い値(10)を持つ新しいオブジェクト及び参照によって渡されたオブジェクトを返し、新しい値(11)を有する
アプリケーション、オーバーロードされた演算子メソッドをデバッグ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"
}
}
、しかし最終的にはオブジェクトであります交換された。なぜこうなった?
あなたは答えの後に質問を変更しないでくださいそれを見ている次の人にとっては混乱します。 – RedGlyph
[X = X ++の違いは何ですか? vs X ++ ;?](http://stackoverflow.com/questions/226002/whats-the-difference-between-xx-vs-x) – nawfal