我有一个关于委托类型的非常基本的问题。我在对象浏览器中比较了Delegate和MulticastDelegate类的成员,并且我无法在MulticastDelegate中找到任何新的额外成员。我还注意到Delegate类具有GetInvocationList虚拟方法。所以我认为Delegate类应该有能力保存对多个方法的引用。如果我的假设是正确的,我想知道为什么不自定义委托类型直接派生自Delegate类而不是MulticastDelegate类。不知道我在这里错过了什么。请帮助我了解差异。为什么委托类型是从MulticastDelegate类派生的,为什么不直接从委托类派生?
4
A
回答
9
基本上Delegate
和MulticastDelegate
的分裂是历史原因。最初将有代表不能被合并,并可能......但结果不是一个有用的区别。显然这只是在将框架/ CLR从MulticastDelegate
中提取出来时才被发现。
从CLR通过C#,第3版:
的System.MulticastDelegate类是从System.Delegate衍生,其本身从System.Object的。有两个代表班的原因是历史的和不幸的; FCL应该只有一个代表班。可悲的是,您需要了解这两个类,因为即使所创建的所有委托类型都具有MulticastDelegate作为基类,您偶尔也会使用Delegate类定义的方法而不是MulticastDelegate类来操作委托类型。 [...]
相关问题
- 1. MKMapViewDelegate派生类和委托分配
- 2. 为什么派生类在不附加委托的情况下处理事件?
- 3. 为什么ObjectContext类不是从某个接口派生的?
- 4. 委托参数 - 基类/派生类冲突
- 5. 为什么MovieClip派生类不会gotoAndStop?
- 6. Swift:当委托者类不是直接子类时,分配委托类?
- 7. 为什么有些MFC类不是从CObject派生的?
- 8. 为什么不委托使用值类型的逆变函数?
- 9. 什么类的委托被调用?
- 10. 委托给派生类的静态方法定义(C++)
- 11. Castle.DynamicProxy2生成委托类型的代理
- 12. 如何将派生类方法委托给协议方法?
- 13. 为什么不委派工作?
- 14. 从UITextField子类捕获委托方法而不是委托
- 15. 从QAbstractTableModel派生类中删除行不起作用,为什么?
- 16. 为什么我不能从多个类派生?
- 17. 为什么我的派生类是一个抽象类? C++
- 18. 为什么不把UIImagePickerController委托给我的Object类?
- 19. 为什么GetType()在显式地将派生类派生到基类后返回派生类?
- 20. 为什么我的委托为空?
- 21. 为什么创建从通用列表(.NET)派生的类?
- 22. 为什么派生类不能引用基类?
- 23. 定义派生类时,为什么基类标记为“公共”?
- 24. 为什么从两个空类派生的空类的大小是2?
- 25. 从泛型T派生类
- 26. 从泛型类派生
- 27. 为什么我无法从System.Enum抽象类派生?
- 28. 类型委托的DependencyProperty
- 29. 委托的返回类型
- 30. 为什么派生类继承基类的私有成员?
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