如果我有引用事件 ThrowEvent、方法 X() 并像这样订阅:
ThrowEvent += X;
ThrowEvent += X;
ThrowEvent += X;
当我尝试制作时发生了什么
ThrowEvent -= X;
它会删除第一个或最后一个添加的方法吗?
您可以轻松地自己测试它:
private static void A(Object sender, EventArgs e) {
Console.Out.Write('A');
}
private static void B(Object sender, EventArgs e) {
Console.Out.Write('B');
}
...
EventHandler eh = null;
eh += A;
eh += A;
eh += B;
eh += A;
eh -= A;
eh(null, EventArgs.Empty);
输出是“ AAB ”,所以我们可以得出结论,最后一个被删除者被删除了
在事件订阅的上下文中,两个委托是相同的,如果:
1.它们指向同一个静态方法, 或者: 2.它们指向同一个类实例的同一个实例方法。
所以,在你的问题中,X 必须满足这个条件。X
删除其中的哪一个并不重要。关键是,在X
被订阅 3 次后,这个方法被调用了 3 次,当事件被引发时。AfterX
取消订阅一次,在引发事件时调用 2 次。