gpt4 book ai didi

C# 删除事件处理程序

转载 作者:IT王子 更新时间:2023-10-29 04:18:49 27 4
gpt4 key购买 nike

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

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

  1. ethernetdevice.PcapOnPacketArrival -= new SharpPcap.PacketArrivalEvent(ArrivalResponseHandler);

  2. ethernetdevice.PcapOnPacketArrival -= ArrivalResponseHandler;

编辑:好的,这是重复的。对于那个很抱歉。答案已发布here .

具有相同目标、方法和调用列表的相同类型的两个委托(delegate)被认为是相等的。

最佳答案

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

就运行时发生的事情而言,事件 Remove 方法似乎并不关心传递给它的委托(delegate)实例是否与传递给 Add 的委托(delegate)实例相同 方法。我不记得为什么会这样,但我猜委托(delegate)实例总是被保留的。

编辑:Jon Skeet 说事件Remove 方法使用值相等(Delegate.Equals)来确定要从列表,而不是实习+引用平等。相同的结果,不同的方法。 :-)

关于C# 删除事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com