Поднять событие, которое передает другое

1

Я хотел бы передать событие. В настоящее время я перехватываю InnerEvent в конструкторе и ретранслирую так:

obj.InnerEvent+=(...)=>{
    if(OuterEvent != null)
        OuterEvent(...);
}

Но это выглядит плохо, поэтому я узнаю, что реле может быть выполнено на уровне событий с добавлением/удалением ключевого слова следующим образом:

event Handler OuterEvent{
  add{ obj.InnerEvent+=value;}
  remove{ obj.InnerEvent+=value;}
}

Но на данный момент я больше не могу поднять свой OuterEvent. Я знаю, почему это невозможно напрямую (читайте здесь), но я не могу найти достойный способ поддерживать мой OuterEvent. Должен ли я связывать и ретранслировать в конструкторе, как я всегда делал? Какая лучшая техника?

Теги:
events

1 ответ

1
Лучший ответ

В некотором смысле OuterEvent больше не существует в качестве события при использовании второго подхода. Теперь это не что иное, как способ подписки на obj InnerEvent, и поэтому OuterEvent теперь фактически является тем же самым событием, что и InnerEvent: нет поддержки делегата OuterEvent который вызывает только подписчиков на это событие. Таким образом, единственный способ вызвать OuterEvent - поднять InnerEvent.

Обходной путь состоял бы в том, чтобы разоблачить средство привлечения InnerEvent извне obj, но я бы подумал об этой плохой практике. Я бы предпочел придерживаться первого метода, если вам нужно также вызвать OuterEvent из вашего внешнего класса. В случаях, когда OuterEvent действительно только пересылает InnerEvent, второй подход довольно изящный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню