从Event中删除相同的方法

时间:2013-08-05 10:59:09

标签: c# events methods

如果我引用事件ThrowEvent,方法X()并订阅如下:

ThrowEvent += X;
ThrowEvent += X;
ThrowEvent += X;

当我尝试制作

时会发生什么
ThrowEvent -= X;

它会删除第一个或最后添加的方法吗?

2 个答案:

答案 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次。