我有以下课程
儿童班:
public class ChildClass
{
...
private void EventHandler(...);
...
}
父类:
public class ParentClass
{
...
ChildClass child;
...
private void EventHandler(...);
...
}
他们都在同一个事件上有一个事件处理程序。
问题是这些处理程序将以什么顺序被调用?
我有以下课程
儿童班:
public class ChildClass
{
...
private void EventHandler(...);
...
}
父类:
public class ParentClass
{
...
ChildClass child;
...
private void EventHandler(...);
...
}
他们都在同一个事件上有一个事件处理程序。
问题是这些处理程序将以什么顺序被调用?
虽然 MSDN 文档明确指出多播委托按订阅顺序调用委托,但假定订阅顺序是确定的,即您处于单线程环境中。
如果不是这种情况,您最好定义两个事件:一个 BeforeEventOccurs 事件和一个 AfterEventOccurs 事件。即使在多线程环境中,这也可以让您对订单进行确定性控制。
订阅代表的顺序,尽管由于规范中的任何地方(我知道)都没有正确指出这是预期的行为,特别是,依赖这样的顺序可能是愚蠢的,因为它可能会随着每个实现而改变。
它将按照它们注册的顺序被调用。
根据这个问题,事件处理程序按照订阅事件的顺序被调用。
来自代表
委托用于将方法作为参数传递给其他方法。事件处理程序只不过是通过委托调用的方法。您创建一个自定义方法,当某个事件发生时,诸如 windows 控件之类的类可以调用您的方法。
从如何:组合代表(组播代表)页面;
委托对象的一个有用属性是可以使用 + 运算符将多个对象分配给一个委托实例。多播委托包含已分配委托的列表。当调用多播委托时,它会按顺序调用列表中的委托。