重複の可能性:
ポストインクリメント演算子のオーバーロード
なぜPostfix ++ / —がC#のプライマリ演算子として分類されるのですか?
++
と--
演算子をオーバーロードできることを確認しました。通常、これらの演算子は2つの方法で使用します。intのインクリメント/デクリメントの前後の例:
int b = 2;
//if i write this
Console.WriteLine(++b); //it outputs 3
//or if i write this
Console.WriteLine(b++); //outpusts 2
ただし、演算子のオーバーロードに関しては、状況が少し異なります。
class Fly
{
private string Status { get; set; }
public Fly()
{
Status = "landed";
}
public override string ToString()
{
return "This fly is " + Status;
}
public static Fly operator ++(Fly fly)
{
fly.Status = "flying";
return fly;
}
}
static void Main(string[] args)
{
Fly foo = new Fly();
Console.WriteLine(foo++); //outputs flying and should be landed
//why do these 2 output the same?
Console.WriteLine(++foo); //outputs flying
}
私の質問は、これらの最後の2行が同じものを出力するのはなぜですか?さらに具体的には、(2つの)最初の行が出力されるのはなぜflying
ですか?
解決策は、演算子のオーバーロードを次のように変更することです。
public static Fly operator ++(Fly fly)
{
Fly result = new Fly {Status = "flying"};
return result;
}