C#のイベントハンドラでは、なぜ "sender "パラメータはオブジェクトでなければならないのですか?
質問
によると
マイクロソフトイベント命名ガイドライン
は
sender
C# のイベントハンドラのパラメータ "は
常に
であり、たとえより特殊な型を使用することが可能であっても、オブジェクト型です。
というようなイベント処理コードがたくさん出てくることになります。
RepeaterItem item = sender as RepeaterItem;
if (item != null) { /* Do some stuff */ }
なぜ規約では、より具体的な型を持つイベントハンドラを宣言することを勧めているのでしょうか?
MyType
{
public event MyEventHander MyEvent;
}
...
delegate void MyEventHander(MyType sender, MyEventArgs e);
何か見逃してない?
後学のために。私は、回答者の一般的な意見に同意します。
は
を使用することです。
EventArgs
を介してデータを渡す) ことです。
です。
は慣習に従うことが重要です。
編集:検索のための餌 RSPEC-3906ルール "イベントハンドラは正しいシグネチャを持つべきである"
どのように解決するのですか?
これはルールというよりパターンです。あるコンポーネントが他のコンポーネントからイベントを転送し、それがイベントを発生させる通常のタイプでない場合でも、元の送信者を維持できることを意味します。
私はそれが少し奇妙であることに同意します - しかし、親しみのために慣習に固執する価値はあるでしょう。(他の開発者にとっての親しみやすさ、です。) 私はこれまで、特に
EventArgs
それ自体では何の情報も伝わらないからです)しかし、それは別の話題です。(少なくとも、私たちは
EventHandler<TEventArgs>
があれば助かるのですが......。
EventArgs<TContent>
があれば便利なのですが...。)
EDIT: もちろん、デリゲートをより汎用的にすることはできます。特にジェネリックの観点からは、それが特に良い理由だとは思えませんが、おそらくは 何か ...
関連
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】"The ConnectionString property has not been initialized "を修正する方法
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] イベントAction<>とイベントEventHandler<>の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】パディングが無効で、削除できない?
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】非静的メソッドはターゲットを必要とする
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] .NETのイベント署名 -- Strong Typedの'Sender'を使用?[クローズド]