Можно ли зарегистрировать одно событие в другом без вспомогательного метода в C #?

Вы должны закрыть самый внешний выходной поток, который вы создали из сокета. Это закроет его. Закрытие сокета или входного потока не делает этого, поэтому оно недостаточно. Закрыв этот выходной поток, вам не нужно ничего делать.

1
задан Martin Vseticka 20 June 2010 в 11:45
поделиться

4 ответа

Каждый раз, когда EventB срабатывает, EventA также срабатывает:

class A {
  private B b;
  public event EventHandler EventA {
    add {
      b.EventB += value;
    }
    remove {
      b.EventB -= value;
    }
  }
  public A() {
    b = new B();
  }
  // ...
}

Все прослушиватели событий теперь зарегистрированы в классе B.

1
ответ дан 2 September 2019 в 23:39
поделиться

Тот факт, что события определены в разных классах, означает, что это не одно и то же событие, хотя они могут иметь одну и ту же сигнатуру. Вы не можете одновременно вызывать события из двух разных классов.

Кроме всего прочего, учтите, что событие обычно запускается от экземпляра класса. Какой экземпляр B.eventB вы вызовете, когда произойдет A.eventA?

0
ответ дан 2 September 2019 в 23:39
поделиться

Вы не можете вызвать событие вне класса. Только сам класс может вызывать свои собственные события. С другой стороны, вы можете открыть публичный метод, принимающий те же параметры, который внутренне вызывает указанное событие.

Использование Reflection также не является вариантом, который позволяет только подписаться на событие другого класса и снять подписку с него.

1
ответ дан 2 September 2019 в 23:39
поделиться

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

0
ответ дан 2 September 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: