Ответ 1
Вы не можете этого сделать, потому что вы вообще ничего не можете сделать для события из-за объекта, которому он принадлежит, кроме добавления и удаления обработчиков. В частности, вы не можете перечислить существующих зарегистрированных обработчиков, и вы не можете их поднять. В вашем случае "копирование" события по сути является тем же самым, что и маскировка, и позволит вам обойти это ограничение; поэтому он не допускается.
См. этот последний ответ для более подробного объяснения того, почему все так, как они есть. Мне просто не хочется переписывать все это здесь..
В вашем конкретном случае, если вы владеете обоими классами, обходным путем является необходимость их непосредственного взаимодействия - сообщите Ui
о соответствующем экземпляре Logic
и добавьте обработчики событий в Logic.OnClick
в Ui.OnClick.add
., Конечно, это вводит сцепление; вы можете уменьшить его до некоторой степени, используя более общие интерфейсы, но вы не можете полностью избавиться от него.
Как примечание, OnClick
не является хорошим именем для события .NET. Общее руководство по именованию говорит, что оно должно быть просто Click
(и OnClick
должно быть именем метода protected virtual
, который его повышает).