C# c语言中的多播委托#

C# c语言中的多播委托#,c#,.net,events,delegates,C#,.net,Events,Delegates,当我们使用多播委托时,只返回最后一个方法值。 我们是否有任何实际场景需要执行所有方法,但只返回最后一个方法值,就像多播委托所做的那样 事件和多播代理之间是否存在任何关系?如果是,它们是如何链接的 谢谢 事件和多播委托之间是否存在任何关系 在C#中,每个委托声明将生成一个多播委托。事件实际上是内部的两个方法,使用委托参数称为add和remove访问器。他们打算添加/删除订阅者(实际上是更改基础多播委托实例) 我们是否有任何实际场景需要执行所有方法,但只返回最后一个方法值,就像多播委托所做的那样 不

当我们使用多播委托时,只返回最后一个方法值。 我们是否有任何实际场景需要执行所有方法,但只返回最后一个方法值,就像多播委托所做的那样


事件和多播代理之间是否存在任何关系?如果是,它们是如何链接的

谢谢

事件和多播委托之间是否存在任何关系

在C#中,每个委托声明将生成一个多播委托。事件实际上是内部的两个方法,使用委托参数称为
add
remove
访问器。他们打算添加/删除订阅者(实际上是更改基础多播委托实例)

我们是否有任何实际场景需要执行所有方法,但只返回最后一个方法值,就像多播委托所做的那样

不,这实际上应该避免。这就是为什么框架中没有非void事件。当使用公共事件时,我们可以假设它们有多个订阅者

对于类似的问题(如何返回每个订户的结果),我不会重复我先前的回答,但也可能值得检查:


另一方面,当委托实例仅用作回调(例如方法参数)时,它们通常是非无效的(例如
Func
delegate族)。虽然从技术上讲,他们也是多播代理,但并不期望他们有多个目标。它们通常由一些lambda表达式(
()=>DoSomething()
)实例化,在这种情况下,它们总是只有一个目标。

“事件和多播委托之间是否存在任何关系?”,如果您没有显式地在事件上实现
添加
/
删除
,默认实现在.net支持多播中使用委托字段和委托。如果您明确地实现了它们,您可以自由地使用不支持多播的东西,尽管添加/删除模型强烈建议应该允许多播。值得注意的是,至少有一个.NET委托()实际上是单次强制转换,即使is具有
add
/
remove
语法。它恰好返回一个
布尔值
,而不是
void
。所以我猜在这种情况下,微软决定多播和返回值不属于一起。