+ = и - = - это синтаксические ярлыки для встроенных внутренних методов с именами Add () и Remove (), которые добавляют или удаляют указатель на внутренний связанный список делегатов, который делегат имеет в качестве частного поля. , Когда вы запускаете Remove, он начинается с заголовка связанного списка и проверяет каждый делегат в списке по одному, пока не найдет тот, который "равен" тому, который вы передали методу Remove (). (используя - = синтаксис)
Затем он удаляет его из связанного списка и исправляет связанный список, чтобы сохранить его связность ...
В этом контексте метод «равно» (для делегата ()) переопределяется, так что он сравнивает только цель делегата и methodPtr, который будет одинаковым, даже если вы создали новый делегат для перейти к Удалить ...