1

如果我有引用事件 ThrowEvent、方法 X() 并像这样订阅:

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

当我尝试制作时发生了什么

ThrowEvent -= X;

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

4

2 回答 2

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 ”,所以我们可以得出结论,最后一个被删除者被删除了

于 2013-08-05T11:15:24.640 回答
0

在事件订阅的上下文中,两个委托是相同的,如果:

1.它们指向同一个静态方法,
或者:
2.它们指向同一个类实例的同一个实例方法。

所以,在你的问题中,X 必须满足这个条件。X删除其中的哪一个并不重要。关键是,在X被订阅 3 次后,这个方法被调用了 3 次,当事件被引发时。AfterX取消订阅一次,在引发事件时调用 2 次。

于 2013-08-05T11:17:02.470 回答