我有一个关于委托类型的非常基本的问题。我在对象浏览器中比较了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. 为什么TextElemt类不是从Control类派生的?
- 4. 为什么ObjectContext类不是从某个接口派生的?
- 5. 委托参数 - 基类/派生类冲突
- 6. 为什么MovieClip派生类不会gotoAndStop?
- 7. Swift:当委托者类不是直接子类时,分配委托类?
- 8. 为什么有些MFC类不是从CObject派生的?
- 9. 为什么不能推断委托参数的类型?
- 10. 为什么不委托使用值类型的逆变函数?
- 11. 为什么建议从Python派生Exception而不是BaseException类?
- 12. 使用构造函数从派生类向基类注入委托方法
- 13. C#反思委托异常:必须派生自委托
- 14. 什么类的委托被调用?
- 15. 委托给派生类的静态方法定义(C++)
- 16. 如果我从泛型类派生非泛型类,会发生什么类型?
- 17. Castle.DynamicProxy2生成委托类型的代理
- 18. 如何将派生类方法委托给协议方法?
- 19. 为什么不委派工作?
- 20. 多播委托必须具有返回类型void。为什么?
- 21. 从UITextField子类捕获委托方法而不是委托
- 22. 为什么我不能从多个类派生?
- 23. 从QAbstractTableModel派生类中删除行不起作用,为什么?
- 24. static_cast从派生类到基类时会发生什么?
- 25. 为什么我的派生类是一个抽象类? C++
- 26. 为什么不把UIImagePickerController委托给我的Object类?
- 27. 为什么GetType()在显式地将派生类派生到基类后返回派生类?
- 28. 为什么我的派生类不能传递给基类?
- 29. 什么是C++深入派生类?
- 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