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

*에 * 솔직히 엉망진창 같다 ... – 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에서 설치할 수 있으며 몇 분 안에 사용할 수 있습니다. 더 까다로운 경우에 대한 학습 곡선이 있지만.

더하여 미래의 이벤트와 더 많은 이벤트를 결합하는 이점을 얻을 수 있습니다.

(기술이 아닌 '그들 중 하나', 그냥 아주 좋은 새로운 조각)