如何在 C# 中创建一个真正的单播委托。即一个委托实例,它可以在其调用列表中引用一个(并且只有一个)方法,因此可以用作回调(对于单个订阅者)而不是事件(可能有很多订阅者)。
该框架具有 System.Delegate 和 System.MulticastDelegate 类,这给人一种错误的印象,即 System.Delegate 是单播,而 System.Multicast 委托添加了多播功能。但是 System.Delegate http://msdn.microsoft.com/en-us/library/system.delegate.aspx的 MSDN 文档表明 System.Delegate 实际上是多播...
“委托的调用列表是一组有序的委托,其中列表的每个元素恰好调用委托所代表的方法之一。”
...而 System.MulticastDelegate 的文档并没有真正解释它提供的额外行为。
这方面的官方文档相当混乱,但有一点很清楚,最终用户不能从 System.Delegate 或 System.MulticastDelegate 派生。那么框架是否支持创建真正的单播委托,该委托可以用作变量来存储对单个回调的引用?
@dtb。如果我可以使用单播委托,则无需运行时检查。当然,应用程序逻辑仍然可能以其他方式失败,例如分配了错误的处理程序,但至少如果我使用单播委托,那么存在多个处理程序的问题我只期望一个是一个简单的问题不可能存在,因此需要检查的东西更少,单元测试更简单,设计更优雅。此外,如果具有返回值的方法的委托在其调用列表中有多个处理程序,则返回给调用者的是列表中最后一个处理程序返回的值,而不是第一个处理程序。