我对 C# 中删除事件处理程序的语法感到困惑。
Something += new MyHandler(HandleSomething); // add
Something -= new MyHandler(HandleSomething); // remove
“new”在每一行创建一个新对象,所以你添加一个对象 然后要求它移除另一个对象。
这能奏效的幕后真相是什么?
从语法上看肯定不是很明显。
最佳答案
+= 和 -= 是名为 Add() 和 Remove() 的内置内部方法的语法快捷方式,它们添加或删除指向委托(delegate)的内部链表的指针,该委托(delegate)具有私有(private)字段.当您运行 Remove 时,它从链接列表的头部开始,一次检查列表中的每个委托(delegate),直到找到与您传递给 Remove() 方法的委托(delegate)“相等”的委托(delegate)。 (使用 -= 语法)
然后,它从链表中删除那个,并修补链表以保持其连接性......
在此上下文中,'equals' 方法(对于 delegate())被覆盖,因此它只比较委托(delegate)的目标和 methodPtr,即使您创建了一个新的委托(delegate)传递给删除...
关于C# 事件删除语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1341895/