我正在学习C和C#,我的问题是C#。如果我将委托作为方法的参数传递,但委托有多个订阅者会发生什么?
以下是代码:
evenPredicate += someMethod;
evenPredicate += anotherMethod;
List<int> evenNumbers = FilterArray(numbers, evenPredicate);
答案 0 :(得分:3)
具有多个订阅者的委托的返回值是最后项的返回值;你可以随意(不正式)验证这一点:
Func<int> x = () => { Console.WriteLine("1"); return 1; };
x += () => { Console.WriteLine("2"); return 2; };
int y = x(); // 2
请注意,所有订阅者都是调用。简单地说:大部分结果都被丢弃了。如果实现需要,他们可以使用GetInvocationList()
来获取单个订阅者,以单独处理结果,但通常在这种情况下,假设谓词的行为就好像它是单个订阅者一样。
答案 1 :(得分:2)
使用来自多播委托的返回值是不好的做法。最有可能从上一个附加的委托实例返回值。
当您使用'='将委托实例分配给委托时,如您所示,您只需删除所有附加的实例并添加新的。使用'+ ='operatop附加另一个。