经过一些阅读后,我了解到处理程序调用顺序与订阅顺序相同,但不能保证。
所以可以说我有:
public event MYDEl ev;
订阅者会:
ev+=GetPaper;
ev+=Print;
ev+=EjectPaper;
保留+确保执行列表顺序的最佳实践机制是什么?
如果是类似字段的事件,它将使用简单的委托组合Delegate.Combine, 然后is保证保留订阅订单。从文档中获取返回值:
一个带有调用列表的新委托,该列表按顺序连接 a 和 b 的调用列表。
一般来说对于事件来说,没有什么是可以保证的——这取决于实施。哎呀,它可能会忽略你所做的每一个订阅。但实际上,任何理智的实现都会保留顺序。
编辑:恶作剧事件实现的示例:
public class BadEventPublisher
{
public event EventHandler Evil
{
add { Console.WriteLine("Mwahahaha!"); }
remove { }
}
protected virtual void OnEvil(EventArgs e)
{
Console.WriteLine("Who cares? Subscriptions are ignored!");
}
}
这就像编写一个属性(例如)从 getter 返回一个随机数并忽略 setter 中的值。这更像是一个理论问题,而不是一个实际问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)