C#删除事件处理程序
我已经这样做了一段时间,但我没有注意到每次删除事件处理程序时我都在使用new
。 我应该创建一个新对象吗?
基本上1和2之间有区别吗?
-
ethernetdevice.PcapOnPacketArrival -= new SharpPcap.PacketArrivalEvent(ArrivalResponseHandler);
-
ethernetdevice.PcapOnPacketArrival -= ArrivalResponseHandler;
编辑:好的,这是重复的。 对于那个很抱歉。 答案发布在这里 。
具有相同目标,方法和调用列表的两个相同类型的委托被认为是相等的。
1和2之间没有区别,因为2是1的语法糖。只有当2引用类级别委托实例字段而不是实际方法名称时,编译的IL才会有差异。
就运行时发生的情况而言,事件Remove
方法似乎并不关心传递给它的委托实例是否与传递给Add
方法的委托实例相同。 我不记得为什么会这样,但我猜想委托实例总是被实习。
编辑: Jon Skeet说事件Remove
方法使用值相等( Delegate.Equals
)来确定要从列表中删除哪个委托,而不是实习+引用相等。 同样的结果,不同的方法。 ?
第二个版本相当于第一个版本; 它只是使用较短的语法。 这是在C#2.0中实现的
上述就是C#学习教程:C#删除事件处理程序分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1015376.html