代理人は不変オブジェクトです。代理人不変性と代入演算子
私がスレッドにしている場合:別のスレッドが例外を上げることはできませんhandler
からデリゲートを排除した場合、私はcopy(...)
を呼び出すときに、スレッドの安全性の操作でコピー
EventHandler handler = (s, e) => Console.WriteLine("...");
EventHandler copy = handler;
copy(new object(), EventArgs.Empty);
。
しかし、私が行った場合、すなわち,:
handler.GetHashCode()
とcopy.GetHashCode()
どちらも同じコードを返します。彼らは両方の参照場合
私は
...代入演算子は、そのデリゲート の新しいインスタンスを行なったし、新しい参照がcopy
変数に入れていたということを考えてどのように、このように、copy
とhandler
は独立することができ メモリ内の同じオブジェクトですか?
混乱しています!
実際の質問は、 "等しいハッシュコードは両方の変数が同じインスタンスを参照していることを意味します" _、その答えは "いいえ"です。 – CodeCaster
@CodeCasterただし、この場合、両方の変数が同じオブジェクトを参照します。 – juharr
変更不可能とは、オブジェクトを変更できないことを意味します。しかし、新しいオブジェクトを 'handler'に代入することも(あるいはnullに設定することもできます)、その変更は' copy'には影響しません。 – juharr