6

デリゲート型に関する非常に基本的な質問があります。Delegateオブジェクト ブラウザでとクラスのメンバを比較しましたが、MulticastDelegateに存在する新しい追加メンバは見つかりませんでしたMulticastDelegate

DelegateクラスにGetInvocationList仮想メソッドがあることにも気付きました。したがって、Delegateクラスには複数のメソッドへの参照を保持する機能が必要だと思います。私の仮定が正しければ、Delegateクラスではなくクラスからカスタム デリゲート型を直接派生させないのはなぜだろうかMulticastDelegate

ここで何が欠けているのかわかりません。違いを理解するのを手伝ってください。

4

1 に答える 1

12

Delegate基本的にとの分割はMulticastDelegate歴史的な理由によるものです。もともと、結合できないデリゲートと結合できるデリゲートが存在する予定でしたが、それは有用な区別ではないことが判明しました。MulticastDelegateどうやら、フレームワーク/CLRから切り離すには少し遅すぎたときに初めて発見されたようです。

C# 経由の CLR から、第 3 版:

System.MulticastDelegateクラスは から派生し、System.Delegateそれ自体は から派生していSystem.Objectます。デリゲート クラスが 2 つある理由は、歴史的かつ残念なことです。FCL にはデリゲート クラスが 1 つだけ存在する必要があります。

残念ながら、これらのクラスの両方に注意する必要があります。これは、作成するすべてのデリゲート型が基本クラスとして存在する場合でも、クラスではなくクラスMulticastDelegateによって定義されたメソッドを使用してデリゲート型を操作することがあるためです。[...]DelegateMulticastDelegate

于 2011-01-28T21:07:36.250 に答える