如果我引用事件ThrowEvent,方法X()并订阅如下:
ThrowEvent += X;
ThrowEvent += X;
ThrowEvent += X;
当我尝试制作
时会发生什么ThrowEvent -= X;
它会删除第一个或最后添加的方法吗?
答案 0 :(得分:0)
您可以自己轻松测试:
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 :(得分:0)
在事件订阅的上下文中,如果出现以下情况,则两个代理是相同的:
1. They point to the same static method, or: 2. They point to the same instance method of the same class instance.
所以,在你的问题中,X必须满足这个条件。删除这些X
中的哪一个并不重要。关键是,在X
订阅3次之后,当引发事件时,此方法被调用3次。取消订阅X
一次后,会在事件发生时调用2次。