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 は特殊なクラスで継承できないから。)