2011-01-28 133 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類來操作委託類型。 [...]

相關問題