做一些阅读后,我明白,处理程序调用顺序是相同的顺序订阅,但它不能保证。
因此,可以说,我有:
public event MYDEl ev;
和用户做:
ev+=GetPaper;
ev+=Print;
ev+=EjectPaper;
保留+保证执行列表顺序的最佳实践机制是什么?
做一些阅读后,我明白,处理程序调用顺序是相同的顺序订阅,但它不能保证。
因此,可以说,我有:
public event MYDEl ev;
和用户做:
ev+=GetPaper;
ev+=Print;
ev+=EjectPaper;
保留+保证执行列表顺序的最佳实践机制是什么?
如果它是一个场式的事件,它会用简单的委托组合按Delegate.Combine
,并保证维护订阅订单。 从文档返回值:
一个新的委托与串接的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!");
}
}
这就像写从吸气剂(说)返回一个随机数,忽略了二传手的值的属性。 这是不是一个真实的更高的理论问题。