C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■86459 / )  Re[4]: 空の delegate は null なの?
□投稿者/ furu (159回)-(2018/01/30(Tue) 22:05:06)
2018/01/30(Tue) 22:05:52 編集(投稿者)
2018/01/30(Tue) 22:05:43 編集(投稿者)



No86453 (魔界の仮面弁士 さん) に返信
> ただ言語仕様面で捉えてみると、+= が Combine というよりは、
> 「a += b」が「a = a + b;」の糖衣構文と捉えた方が良いかと思っています。

言語仕様(JIS規格X3015:2008)では、x op= yは

x op yの演算の結果がxの型に暗黙に変換される場合、x = x op y
x op yの演算の結果がxの型に明示的に変換され、yがxの型に暗黙的に変換される場合、x = (T)(x = x op y)
 ※Tはxの型,仕様にはシフト演算子の場合の記述もある

>
> 「変数 a」の型が、「a + b」の演算が返す型と同じ(あるいは暗黙変換可能)でない場合、
> a += b; はコンパイルエラーとなります。

byte b = 0;

b += 1; //OK
b = b + 1; //エラー

b <<= 1; //OK
b = b << 1; //エラー

また、x op= y が x = x op yと決定的に違うのは、xの評価が1度だけだということが保証されています。

int[] x = new int[100];
x[new Random().Next(100)] += 7; //new Random().Next(100)は、1度だけ計算

> ただしデリゲートが event 化されている場合は話が変わってきます。

言語仕様で、通常の+=,-=は、「複合代入」ですが、イベントの場合「イベント代入」となっていて
まったくの別物として定義されてますね。
解決済み
返信 編集キー/


管理者用

- Child Tree -