Возможно делегировать события от внутреннего экземпляра объекта до обработчиков событий 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 и делая нормальную проверку там всегда возможен, но на случае, существует партия вложенных событий, он собирается закончиться с партией шаблонного кода.
Два варианта. Во-первых:
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);
}
}
Преимущество второй формы состоит в том, что тогда источником события оказывается промежуточный класс, а не мастер - что разумно, поскольку именно на это подписались обработчики .