• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C#における++演算子のオーバーロードについて)

C#における++演算子のオーバーロードについて

このQ&Aのポイント
  • C#における++演算子のオーバーロードについて詳しく説明してください。
  • ++演算子のオーバーロード関数の実装が一つなのに前置インクリメントと後置インクリメントが適切に行われています。どのようなカラクリで実行されているのでしょうか?
  • C#の++演算子のオーバーロードについての記事を読んでみましたが、理解できませんでした。詳しく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

コード2の形式では面白くないですね なぜなら ++(--)の実装を変えてしまっているからです ++の前置き演算子の場合 引数の内容を保存してから 演算子メソッドが呼び出されます そのパラメータであるxは参照なのでこれを操作して変更してしまうと呼び出しもとのオブジェクトを操作することになってしまいます したがって ++tとしても t++としても加算された結果が式の値になってしまうのだろうと思います

__tanpopo__
質問者

お礼

redfox63 様へ ご回答ありがとうございました。 大変参考になりました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

++演算子の 前置と後置での動作と異なるといったことですか? 期待した結果はどのような物なのでしょう 正常に機能しているように見えますが ・・・ 最初の t++は 後置きなのでtの値がWrite参照されてから加算された新しいclass Testオブジェクトが代入されますので 初期値の0が表示されます ++tは前置きなので加算処理実行されて新しいclass Testオブジェクトが代入されたオブジェクトを参照します

__tanpopo__
質問者

補足

redfox63 様へ 早速のご回答ありがとうございました。 質問の主旨がうまく伝わらなくてすみませんでした。 質問したいことを具体的に申しますと、++演算子を 次のようにオーバーロードして実行しますと、 === コード1==================================================== public static Test operator ++(Test t) { Test result = new Test(t.Num + 1); return result; } ================================================================ 後置きの実行結果が当初の質問にあります実行結果のように0に なるのに対して、++演算子を次のようにオーバーロードしますと 後置きの実行結果が、1になってしまいます。 === コード2 =================================================== public static Test operator ++(Test t) { t.Num++; return t; } =============================================================== どうして、コード2のように実装すると、後置きの演算結果が1になる のかがわからないのです。その原因を知りたいのですが、どうか ご回答お願いします。