DelegateとMulticastDelegate
分離されている理由は、歴史的なトコにあるらしい。詳細は知らない。
あんま関係ないけど、そもそもデリゲートはひとつのメソッドだけラップできれば充分じゃない?いや、明確な根拠はないけど。
デリゲートは Delegate を継承して定義する。そんで MulticastDelegate の代わりに、CompositeDelegate みたいな感じのがアレばイイ。
public sealed class CompositeDelegate<T> : Delegate where T : Delegate { private List<T> _invocationList; public CompositeDelegate() { ... } public void Add(T delegate) { ... } public void Remove(T delegate) { ... } public T[] GetInvocationList() { ... } protected override object DynamicInvokeImpl(object[] args) { ... } public static implicit operator T(CompositeDelegate<T>) { ... } }
ホントにコレが実現可能なのかは怪しいトコロ。 (ちなみに、普通にプログラミングすることは無理。Delegate は特殊なクラスで継承できないから。)