为什么委托类型派生自MulticastDelegate类,为什么它不直接派生自Delegate类?

时间:2011-01-28 21:04:56

标签: c# .net delegates multicastdelegate

我有一个关于委托类型的非常基本的问题。我在对象浏览器中比较了Delegate和MulticastDelegate类的成员,我在MulticastDelegate中找不到任何新的附加成员。我还注意到Delegate类有GetInvocationList虚方法。所以我假设Delegate类应该能够保存对多个方法的引用。如果我的假设是正确的,我想知道为什么自定义委托类型不直接派生自Delegate类而不是MulticastDelegate类。不知道我在这里缺少什么。请帮我理解其中的差异。

1 个答案:

答案 0 :(得分:9)

基本上DelegateMulticastDelegate的分割是出于历史原因。最初会有无法组合的代表和可能......但结果不是有用的区别。显然只有在将MulticastDelegate从框架/ CLR中删除时才会被发现。

从CLR到C#,第3版:

  

System.MulticastDelegate类派生自System.Delegate,它本身派生自System.Object。有两个代表类的原因是历史和不幸的; FCL中应该只有一个委托类。遗憾的是,您需要了解这两个类,因为即使您创建的所有委托类型都将MulticastDelegate作为基类,您偶尔也会使用Delegate类而不是MulticastDelegate类定义的方法来操作您的委托类型。 [...]