Я хотел бы передать событие. В настоящее время я перехватываю InnerEvent в конструкторе и ретранслирую так:
obj.InnerEvent+=(...)=>{
if(OuterEvent != null)
OuterEvent(...);
}
Но это выглядит плохо, поэтому я узнаю, что реле может быть выполнено на уровне событий с добавлением/удалением ключевого слова следующим образом:
event Handler OuterEvent{
add{ obj.InnerEvent+=value;}
remove{ obj.InnerEvent+=value;}
}
Но на данный момент я больше не могу поднять свой OuterEvent. Я знаю, почему это невозможно напрямую (читайте здесь), но я не могу найти достойный способ поддерживать мой OuterEvent. Должен ли я связывать и ретранслировать в конструкторе, как я всегда делал? Какая лучшая техника?
В некотором смысле OuterEvent
больше не существует в качестве события при использовании второго подхода. Теперь это не что иное, как способ подписки на obj
InnerEvent
, и поэтому OuterEvent
теперь фактически является тем же самым событием, что и InnerEvent
: нет поддержки делегата OuterEvent
который вызывает только подписчиков на это событие. Таким образом, единственный способ вызвать OuterEvent
- поднять InnerEvent
.
Обходной путь состоял бы в том, чтобы разоблачить средство привлечения InnerEvent
извне obj
, но я бы подумал об этой плохой практике. Я бы предпочел придерживаться первого метода, если вам нужно также вызвать OuterEvent
из вашего внешнего класса. В случаях, когда OuterEvent
действительно только пересылает InnerEvent
, второй подход довольно изящный.