Действительно ли возможно “объединить EventHandlers в цепочку” в c#?

Возможно делегировать события от внутреннего экземпляра объекта до обработчиков событий corrent объекта с синтаксисом как это:

public class MyControl {
   public event EventHandler Finish;

   private Wizard wizard;
   public MyControl( Wizard wizard ) {
      this.wizard = wizard;

      // some other initialization going on here...

      // THIS is what I want to do to chain events
      this.wizard.Finish += Finish;
   } 
}

Мотивация для вышеупомянутой структуры - то, что у меня есть много подобных мастеру потоков UI и требуемый для разделения Обратного, Передайте, и обработка Отмены к единому классу для уважения Открывают Closed Principle и Single Responsibility Principle в моем дизайне.

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

22
задан plouh 24 February 2010 в 07:16
поделиться

1 ответ

Два варианта. Во-первых:

 public event EventHandler Finish
 {
     add { wizard.Finish += value; }
     remove { wizard.Finish -= value; }
 }

Во-вторых, как вы упомянули:

 public event EventHandler Finish;

 wizard.Finish += WizardFinished;

 private void WizardFinished(object sender, EventArgs e)
 {
     EventHandler handler = Finish;
     if (handler != null)
     {
         handler(this, e);
     }
 }

Преимущество второй формы состоит в том, что тогда источником события оказывается промежуточный класс, а не мастер - что разумно, поскольку именно на это подписались обработчики .

35
ответ дан 29 November 2019 в 05:03
поделиться
Другие вопросы по тегам:

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