我有一個關於委託類型的非常基本的問題。我在對象瀏覽器中比較了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