2009-04-02 4 views
1

.net EventHandlerは、EventArgsから継承するテンプレートに限定されています。それはどうですか?実装は、次のコードを示しています。C#テンプレートを使用して間違っている代理人

[Serializable] 
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e); 

しかし、私はTEventArgsは単なる名前だと思います。 MyClassから継承するものに限定された型指定されたデリゲートを書くにはどうすればよいですか?

+0

Jon Skeetのコードを見ると、2秒で解決策が見えます。私は両方の答えを使用して、ドキュメントへのリンクを逃したくはありませんが、正しい答えを1つだけマークすることができます。 – Tarion

+0

リンクを追加するにはフォルトではありません;でも、明らかな部分も書き留めてください。 – Tarion

答えて

5

TEventArgsは、汎用タイプパラメータですが、制約があります。実際の署名は次のとおりです。

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

where TEventArgs : EventArgs」ビットは、あなただけEventArgsまたは派生クラスであるTEventArgsため型引数を供給することができることを意味型の制約です。

これはちょうどデリゲート宣言に適用された "普通の" C#ジェネリックスです。

関連する問題