c#

时间:2019-03-14 06:58:46

标签: c# .net events delegates

当我们使用多播委托时,仅返回最后一个方法值。 在任何实际情况下,是否都需要执行所有方法,但只返回最后一个方法值,就像多播委托一样?

事件与多播委托之间是否存在任何关系?如果是,它们如何链接?

谢谢。

1 个答案:

答案 0 :(得分:1)

  

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

在C#中,每个委托声明将生成一个多播委托。事件实际上是内部的两个方法,称为addremove访问器,带有委托参数。它们的目的是添加/删除订户(实际上是更改基础的多播委托实例)。

  

在任何实际情况下,都需要执行所有方法,但仅应像多播委托那样返回最后一个方法值吗?

不,实际上应该避免这种情况。这就是框架中没有非空事件的原因。在使用公共事件时,我们可以假定他们有多个订阅者。

对于类似的问题(如何返回每个订户的结果),我不会重复我的较早答案,但也可能值得检查:How to use string delegate subscribed to 2 methods

另一方面,当委托实例仅用作回调(例如方法参数)时,它们通常是非无效的(例如Func<...>委托族)。尽管从技术上讲它们也是多播委托,但是并不期望它们有多个目标。这些通常通过一些lambda表达式(() => DoSomething())进行实例化,在这种情况下,它们始终只有一个目标。