在C#编写的多播代表 - 我应该使用运营商或Action.Combine?(Composing mu

2019-07-17 23:00发布

阅读文档,我可以看到, +操作符可以用来撰写/合同类型的代表。

以同样的方式,我可以看到,我可以从由委托使用删除-运营商。

我也注意到, 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和其他代码两种方式。 有,我应该用一种方式或其他理由吗? 是否有任何坑瀑布? 例如- I可以看到在线路的警告a -= b; 声称Delegate subtraction has unpredictable results -所以我应该避免这种通过删除?

Answer 1:

委托经营者( +-的简写静态方法。
有没有什么不同。

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



文章来源: Composing multicast delegates in C# - should I use operators or Action.Combine?