Это на самом деле не было бы моей оригинальной мыслью.
Однако я подумал, что могу ответить на это:
"Вдобавок ко всему, я не вижу никаких теоретических или практических причин, по которым мы не могли бы проводить явные события, подобные полевым. Также я не вижу причин, по которым нам это особенно нужно. из тайн неизвестного ".
-Эрик Липперт
В главе 23 Введение программиста в C # , второе издание, Эрик Ганнерсон писал:
"[I] Если другой класс также хотел вызывать при нажатии кнопки, можно использовать оператор + =, например:
button.Click + = new Button.ClickHandler (OtherMethodToCall);
К сожалению, если другой класс не был внимателен, он может сделать следующее:
button.Click = new Button.ClickHandler (OtherMethodToCall);
Это было бы плохо, так как это означало бы, что наш ButtonHandler будет отключен, и будет вызван только новый метод. "
...
«Необходим какой-то способ защиты поля делегата, чтобы к нему можно было получить доступ только с помощью + = и - =.»
Он переходит на следующие несколько страниц, чтобы прокомментировать, в том числе методы add () и remove () для реализации этого поведения; возможность прямой записи в эти методы и последствия выделения памяти для ненужных ссылок на делегаты.
Я бы добавил еще, но я слишком уважаю автора, чтобы сделать это без его разрешения. Я рекомендую найти копию этой книги и рекомендую Эрика Ганнерсона в целом (блог и т. Д.)
В любом случае, я надеюсь, что это относится к теме, и если да, надеюсь, она проливает свет на эту "тайну неизвестного"? (Я читал эту главу и искал переполнение стека для понимания логических соображений обработчика событий при создании пользовательских коллекций из пользовательских объектов) - я упоминаю об этом только потому, что не претендую на конкретные полномочия по этому конкретному вопросу. Я сам всего лишь студент в поисках «просветления»: -)