2011-01-28 105 views
4

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

+0

Dupe:[is-there-a-delegate-which-isnt-a-multicastdelegate-in-c?]​​(http://stackoverflow.com/questions/4711118/is-there -a-代表-其中-心不是-A-multicastdelegate-在-C?RQ = 1) – nawfal 2014-07-07 17:40:59

回答

9

基本上DelegateMulticastDelegate的分裂是历史原因。最初将有代表不能被合并,并可能......但结果不是一个有用的区别。显然这只是在将框架/ CLR从MulticastDelegate中提取出来时才被发现。

从CLR通过C#,第3版:

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

相关问题