ドキュメントを読むと、+
演算子を使用して同じタイプのデリゲートを作成/結合できることがわかります。
-
同じように、演算子を使用して、構成されたデリゲートからを削除できることがわかります。
また、この型には、2つのデリゲートの呼び出しリストを連結し、あるデリゲートの呼び出しリストの最後のオカレンスを別のデリゲートの呼び出しリストから削除するために使用できるAction
静的メソッドCombine
とメソッドがあることに気付きました。Remove
Action a = () => Debug.WriteLine("Invoke a");
Action b = () => Debug.WriteLine("Invoke b");
a += b;
a.Invoke();
//Invoke a
//Invoke b
Action c = () => Debug.WriteLine("Invoke c");
Action d = () => Debug.WriteLine("Invoke d");
Action e = Action.Combine(c, d);
e.Invoke();
//Invoke c
//Invoke d
a -= b;
a.Invoke();
//Invoke a
e = Action.Remove(e, d);
e.Invoke();
//Invoke c
それらは、呼び出しリストから結合/削除する方法に関して同じ結果を生成するように見えます。
SOのさまざまな例や他のコードで使用されている両方の方法を見てきました。どちらか一方を使うべき理由はありますか?落とし穴はありますか?たとえば、次の行に警告が表示されa -= b;
ますDelegate subtraction has unpredictable results
。削除を使用してこれを回避する必要がありますか?