- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c# イベント用デリゲートの引数)
c# イベント用デリゲートの引数についての質問
このQ&Aのポイント
- c#初心者がイベントに用いるデリゲートの引数に関して質問しています。
- 「System.Windows.Forms.Control」のイベント以外のクラスでも「EventHandler<T>」デリゲートを使う必要があるのかについて疑問を持っています。
- また、コントロールクラスでのイベントの引数には「SampleHandler(object sender, …」のように指定する必要があるのかについても質問しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
イベント自体はEventHandlerやEventHandler<TEventArgs>である必要はないのですが,そうであることが推奨されています。 また,イベントの型の第一引数がobject型であるため,senderをSampleControl型にすることはできません。 # 共変の関係になるため,つまりは呼び出し側はSampleControlとは限らないものを渡すことが出来るために変換できません。 MSDN: イベントのデザイン http://msdn.microsoft.com/ja-jp/library/ms229011.aspx Site: デリゲート (C# によるプログラミング入門) http://ufcpp.net/study/csharp/sp_delegate.html#co-contra
お礼
回答ありがとうございます。 共変・反変は最近見つけたばっかりだったのでちゃんと理解できていませんでした。 それとひとつ気になるのは、確かに、イベントハンドラは「SampleClass sender」にしてしまうと問題あるかもしれませんが、 デリゲート型の引数を「EventArgs e」の方は「EventArgs」から派生したもの(例えば、EventHander<ChancelEventArgs>の「EventArgs」→「CancelEventArgs」)がOkで、「object sender」→「SampleClass sender」の方はダメなのかまだ少し引っかかっています。