2012-04-11 2 views
0

Я хочу WinForm зарегистрировать OnLoad событие с другим объектом - что-то вроде:Может лямбда позволить другой объект, чтобы ввести в действие

SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e)); 

Возможно ли это? Я не возражаю против создания делегатов или выражений для «помощников» на стороне «SomeObject», но я пытаюсь выяснить, что моя подпись метода будет даже выглядеть для RegisterEvent(...).

+1

извините, не совсем понятно, что вы пытаетесь достичь .. что архитектура вы пытаетесь построить? – Tigran

ответ

2

Метод RegisterEvent должен был бы выглядеть следующим образом:

void RegisterEvent(Action<EventHandler> addEventHandler) 
{ 
    addEventHandler((sender, e) => 
    { 
     // loaded 
    }); 
} 

Использование:

someObject.RegisterEvent(handler => { this.OnLoad += handler; }); 
+0

to * me * кажется беспорядочно честным ... – Tigran

+0

это должно сработать ... Я попробую - очевидно, я пытался найти лес, но не видел его для деревьев ... – IAbstract

0
SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; }); 
0

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

Я бы сказал, что вы должны посмотреть на The Reactive Extensions (Rx)....
Они обеспечивают легкость в работе и отстреливают ваши собственные «события» более или менее похожими на свойства или методы (и без типичной боли делегатов, добавления/подписки или частных ограничений и т. Д., В упрощенном виде).
... и это может выглядеть ...

someObjectInstance.MyEvent.Subscribe(d=> 
{ 
    // ... your lambda more or less 
}); 

... и в классе есть если упрощена только один Subject<MyEventData> _myEvent; и _myEvent.OnNext(data) (идет внутри метода вы хотите подняться с) + собственности чтобы открыть это поле (IObservable<MyEventData> MyEvent {get{return _myEvent;}}).

это то, что вы действительно хотите.

Вы можете установить их из NuGet и использовать в считанные минуты. Хотя есть кривая обучения для более сложных случаев.

Плюс вы получаете выгоду от объединения событий в будущем и многое другое.

(не «один из них», просто очень хорошая новая часть технологии)

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