MulticastDelegate.GetInvocationList()可以返回其他类型的委托吗?

时间:2015-10-21 13:48:01

标签: c# .net

考虑以下简化的责任链实施:

public class EventChainEventArgs : EventArgs
{
    public bool Handled { get; set; }
}

public static class EventChainExtensions
{
    public static void RaiseChain<T>(this EventHandler<T> handler, object sender, T args)
        where T : EventChainEventArgs
    {
        if (handler == null) return;
        var invocationChain = handler.GetInvocationList();
        foreach (var item in invocationChain)
        {
            ((EventHandler<T>)item)(sender, args);
            if (args.Handled)
                return;
        }
    }
}

我不确定假设EventHandler<T>.GetInvocationList()调用只返回EventHandler<T>的实例或者至少可以转换为该类型的某些内容是否正确?

给定method group conversion variance我会说调用列表中的所有委托实例应该是相同的类型(否则不需要转换),但这是一种隐含的假设。任何人都可以确认吗?

0 个答案:

没有答案