演算子のオーバーロード (C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_operator.html
代入演算
代入演算子は直接オーバーロードすることは出来ませんが、 対応する2項演算子をオーバーロードすることで利用可能になります。
例えば、+ 演算子をオーバーロードした型は、 x += y とすることで、 x = x + y と同じ結果が得られます。
C# とは、こんな仕様だったのか。これだと、
Foo x = new Foo(); Foo y = new Foo(); x += y;
とすると、最初の x と、代入演算をした後の x は、異なるインスタンスということになる。
実際に、
Foo x = new Foo(); Foo y = new Foo(); Foo z = x; x += y; Console.WriteLine(System.Object.ReferenceEquals(x, z));
は False と表示される。
「代入演算」という演算をしたのにインスタンスが変わるって、なんか面食らうな。
これで困る場面としては、たとえば、getter しかないプロパティーに代入演算したい場合だ。たとえば、
Foo x = new Foo(); Hoge h = new Hoge(); h.FooProp += x;