2009-11-28 2 views

ответ

2

Если вы хотите, чтобы выставить события непосредственно (без определения новых обработчиков, которые вы ждете ваших абонентов), вы можете сделать это:

class MyClass { 

    private readonly OtherClass other = new OtherClass(); 

    public event EventHandler Click { 
     add { other.Click += value; } 
     remove { other.Click -= value; } 
    } 

} 

Преимущества этого метода заключается в том, что вам не нужно обрабатывать события из OtherClass и пересылать их как свои собственные. Недостатком (и причиной того, что я объявлял «другое» поле как только для чтения) является то, что любой, кто подключается к событию Click MyClass, действительно подключается к событию ClickClick другого пользователя косвенно. Таким образом, вы не захотите просто изменить другой экземпляр, потому что абоненты, которые уже обрабатывали событие, не будут вызываться.

+1

В частности, обратите внимание, что обработчики событий получат ссылку на внутренний объект как аргумент 'sender'. Если вы намеренно иначе не открываете внутренний объект, это может быть прерыватель инкапсуляции. –

Смежные вопросы