OnLoad
WinForm でイベントを別のオブジェクトに登録したい- 次のようなもの:
SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));
これは可能ですか?これを行うために「SomeObject」側で「ヘルパー」のデリゲートまたは式を作成してもかまいませんが、RegisterEvent(...)
.
RegisterEvent メソッドは次のようにする必要があります。
void RegisterEvent(Action<EventHandler> addEventHandler)
{
addEventHandler((sender, e) =>
{
// loaded
});
}
使用法:
someObject.RegisterEvent(handler => { this.OnLoad += handler; });
SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; });
そのようなものが本当に必要な場合 (常に良い質問です。通常、このようなものは、デザインについて少し奇妙なことを示す兆候ですが、そうである必要はありません)、
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 からインストールして、数分で使用できます。よりトリッキーなケースには学習曲線がありますが。
さらに、将来のイベントを組み合わせることで、さらに多くのメリットが得られます。
(「それらの1つ」ではなく、非常に優れた新しいテクノロジーです)