C# 事件删除语法

2023-11-25

我对 C# 中删除事件处理程序的语法感到困惑。

Something += new MyHandler(HandleSomething); // add
Something -= new MyHandler(HandleSomething); // remove

“new”在每一行创建一个新对象,因此您添加一个对象 然后要求它删除另一个对象。

这到底是怎么回事?
从语法上看确实不明显。


+= 和 -= 是名为 Add() 和 Remove() 的内置内部方法的语法快捷方式,它们添加或删除指向委托的内部链接列表的指针,该委托将其作为私有字段。当您运行Remove时,它从链表的头部开始,一次检查列表中的每个委托,直到找到与您传递给Remove()方法的委托“相等”的委托。 (使用 -= 语法)

然后,它从链表中删除该链表,并修补链表以保留其连接性......

在这种情况下,“equals”方法(对于 delegate())被重写,以便它只比较委托的目标和 methodPtr,即使您创建了一个新的委托来传递给 Remove,methodPtr 也将是相同的...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 事件删除语法 的相关文章

随机推荐