次の C# コードがあるとします。
Action a = TestMethod;
Action b = TestMethod;
Action c = b;
b += a;
テストは がb
と同じインスタンスではないことを示しているc
ため、明らかに+
オペレーターがデリゲートの新しいインスタンスを作成しているように見えます。これは正しい仮定ですか?-instance を内部で再利用しますかb
、それともメソッド/ターゲット情報を新しいインスタンスにコピーするだけですか?
デリゲートの演算子の実装が見つから+
ないようです。デリゲート クラスに含まれていないようです。
誰でもこの問題に光を当てることができますか?
私が尋ねている理由は、タマネギのようにお互いを重ねるいくつかのクラスを作成していて、最も外側のレイヤーが内側のレイヤーを呼び出し、いくつかのデリゲートを取得し、それらのデリゲートにさらにメソッドをアタッチするためです.そうすることで、内部レイヤーから取得したデリゲートが何らかの形で変更されることが懸念されます。その場合、内部参照だけでなく、コピー/クローンを返す必要があります。
これは完全に私のライブラリの内部コードであることに注意してください。したがって、そのような内部データ構造を渡すことは一般的に悪い考えであることはわかっていますが、これらのクラスで安全に実行できる場合はそうします。