6

我有一个关于委托类型的非常基本的问题。我比较了对象浏览器中的成员DelegateMulticastDelegate类,但在MulticastDelegate.

我还注意到Delegate该类具有GetInvocationList虚拟方法。所以我假设这个Delegate类应该有能力保存对多个方法的引用。如果我的假设是正确的,我想知道为什么不直接从Delegate类而不是MulticastDelegate类派生自定义委托类型。

不知道我在这里缺少什么。请帮助我理解其中的区别。

4

1 回答 1

12

Delegate基本上和的分裂MulticastDelegate是出于历史原因。最初会有不能合并的代表和可以合并的代表……但结果证明这不是一个有用的区别。MulticastDelegate显然,只有在脱离框架/CLR为时已晚时才发现这一点。

从 CLR 通过 C#,第 3 版:

System.MulticastDelegate类派生自,而System.Delegate后者本身又派生自System.Object。之所以有两个代表类是历史性的,也是不幸的;FCL 中应该只有一个委托类。

遗憾的是,您需要了解这两个类,因为即使您创建的所有委托类型都MulticastDelegate作为基类,您偶尔也会使用Delegate类而不是MulticastDelegate类定义的方法来操作您的委托类型。[...]

于 2011-01-28T21:07:36.250 回答