C#删除事件处理程序

我一直在做这一段时间,但我没有注意到,我一直在使用一个新的每次我删除一个事件处理程序。我应该创建一个新的对象吗?

基本上1和2之间有区别吗?

> ethernetdevice.PcapOnPacketArrival – = new SharpPcap.PacketArrivalEvent(ArrivalResponseHandler);
> ethernetdevice.PcapOnPacketArrival – = ArrivalResponseHandler;

编辑:
好的,这是一个重复。对于那个很抱歉。
回答已过帐here

具有相同目标,方法和调用列表的相同类型的两个代理被认为是相等的。

1和2之间没有区别,因为2是1的语法糖。只有当2引用类级别的委托实例字段而不是实际的方法名称时,编译的IL才有区别。

就在运行时发生了什么,事件Remove方法似乎不关心传递给它的委托实例是否与传递给Add方法的委托实例相同。我不记得离开为什么这是,但我猜想,代理实例总是interned。

编辑:Jon Skeet说,事件Remove方法使用值平等(Delegate.Equals)来确定要从列表中删除哪个代理,而不是实际引用相等。相同的结果,不同的方法。 🙂

http://stackoverflow.com/questions/1486214/c-sharp-removing-an-event-handler

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C#删除事件处理程序