2012-04-11 6 views
0

私はWinフォームが別のオブジェクトと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 
}); 

...のようになります...そしてちょうど1 Subject<MyEventData> _myEvent;_myEvent.OnNext(data)簡略化された場合にクラスにあります(あなたがから上昇するメソッド内部に入る)+プロパティそのフィールドを公開する(IObservable<MyEventData> MyEvent {get{return _myEvent;}})。

これは本当に欲しいものです。

NuGetからインストールして分単位で使用できます。よりトリッキーなケースの学習曲線はありますが。

さらに、将来的にイベントを組み合わせる利点があります。

(技術のない「それらの1」、ちょうど非常に良い新しい作品)

関連する問題