2009-07-24 4 views
0

からカスタムのEventHandlerに基本パラメータHow to: Publish Events that Conform to .NET Framework GuidelinesなぜEventArg

から、あなたが定義し クラス内のイベントは、任意の有効な デリゲート型に基づくことができますが、値を返す でも代表者、それは一般的に推奨 です次の例の に示すように、 のイベントを.NET Frameworkパターンに基づいて作成することは、 EventHandlerを使用して行います。

なぜですか?方法:

public delegate void GenericEventHandler<TType, TArgs>(TType sender, TArgs args); 
public event GenericEventHandler<SomeSender, SomeArg> SomeEvent; 

答えて

2

主に、(object sender, EventArgs e)という署名付きの方法でイベントを処理できるようにします。デリゲートはバリアント(共変リターンタイプと反変な引数タイプ)であることに注意してください。

+0

+1。あなたはそれに値する、私はここでほとんどの人ほど精巧ではない。 –

+0

そこには価値があります。しかし、あなたのパラメータのタイプを知ることは、私にとってもっと価値があるようです。 – pomeroy

+0

私はあなたの異議を理解するかどうか分からない。あなたは通常、 'EventArgs'をそのまま使用することはありません。そのタイプから派生し、この特定のイベントが必要とするすべての情報を追加し、それを使用します。イベントハンドラは、特定の要件に応じて、その引数の "型を知る"か、無視します(そして単に 'EventArgs'を受け入れます)。 「sender」引数の型が常に「オブジェクト」であるのが好きではないのですか? –

1

これを最新の状態にする:.NET 4.5以降、このような制約はありません。新しいシグネチャは次のとおりです。

[SerializableAttribute] 
public delegate void EventHandler<TEventArgs>(
    Object sender, 
    TEventArgs e 
) 

以前はでした:

[SerializableAttribute] 
public delegate void EventHandler<TEventArgs>(
    Object sender, 
    TEventArgs e 
) 
where TEventArgs : EventArgs 

私は、なぜこのような変化を見つけることができませんでした。誰かが.NET開発者から彼らの決定を説明することができれば素晴らしいだろう。