タイトルは誤解を招く可能性があるため、質問全体をお読みください:-)。
「複合代入演算子」によってop=
、たとえばこのような構造を念頭に置いてい+=
ます。純粋な代入演算子(=
)は私の質問に属していません。
「理由」とは、意見ではなく、デザイナー(またはその同僚)が推論(つまり、デザイン選択のソース)を表明する際のリソース(書籍、記事など)を意味します。
私はC ++とC#に見られる非対称性に困惑しています(はい、C#はC ++ 2.0ではないことを知っています)-C ++では演算子+=
をオーバーロード+
し、事前に定義された演算子に依存する適切な演算子をほぼ自動的に記述します C#では逆になります-オーバーロードし+
、+=
合成されます。
私が間違っていない場合、+=
新しいオブジェクトを作成する必要があるため、実際の場合、後者のアプローチは最適化の機会を殺します。そのため、このようなアプローチには大きな利点がありますが、MSDNはあまりにも恥ずかしがり屋なので、それについて話すことはできません。
そして、その利点が何なのか疑問に思います-だから、C#の本、テクトークビデオ、ブログエントリで説明を見つけたら、参考に感謝します。
私が見つけた最も近いものは、Eric Lippertブログへのコメントです。C#でオーバーロードされた演算子が常に静的なのはなぜですか?トム・ブラウン。静的なオーバーロードが最初に決定された場合は、構造体に対してどの演算子をオーバーロードできるかを単に指定します。これにより、クラスで何をオーバーロードできるかがさらに決まります。
*=
、参照型を変更することは意味的に正しくないことがわかります。
+=
最初にオーバーロードするのはばかげているようです。なぜあなたはその部分ではなく、結合された操作をオーバーロードするのですか?