在C#中组合多播委托 – 我应该使用运算符还是Action.Combine?

阅读文档我可以看到+运算符可用于组合/组合相同类型的委托。

以同样的方式,我可以看到我可以使用-运算符从组合委托中删除a。

我还注意到Action类型具有静态CombineRemove方法,这些方法可用于连接两个委托的调用列表,并分别从另一个委托的调用列表中删除委托的最后一次出现的调用列表。

  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;看到警告a -= b; 说明Delegate subtraction has unpredictable results – 所以我应该通过使用删除来避免这种情况吗?

委托运算符( +- )是静态方法的简写。
完全没有区别。

a += b编译成a = (Action)Delegate.Combine(a, b)