考虑以下简化的责任链实施:
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我会说调用列表中的所有委托实例应该是相同的类型(否则不需要转换),但这是一种隐含的假设。任何人都可以确认吗?