空のC#イベントハンドラを自動作成する
2023-10-05 08:31:45
質問
C#では、ハンドラを持たないイベントを発生させることはできません。したがって、各呼び出しの前に、イベントがnullであるかどうかを確認する必要があります。
if ( MyEvent != null ) {
MyEvent( param1, param2 );
}
私は自分のコードをできるだけきれいに保ち、これらのNULLチェックをなくしたいと思っています。少なくとも私の場合は、パフォーマンスにあまり影響を与えないと思います。
MyEvent( param1, param2 );
今のところ、私は各イベントに空のインラインハンドラを手動で追加することでこれを解決しています。これは、私がそれを行うことなどを覚えておく必要があるため、エラーが発生しやすいのです。
void Initialize() {
MyEvent += new MyEvent( (p1,p2) => { } );
}
リフレクションとCLRマジックを使って、与えられたクラスのすべてのイベントに対して空のハンドラを自動的に生成する方法はありますか?
どのように解決するのですか?
私は別の投稿でこれを見て、恥ずかしながらそれを盗み、それ以来私のコードの多くで使用しています。
public delegate void MyClickHandler(object sender, string myValue);
public event MyClickHandler Click = delegate {}; // add empty delegate!
//Let you do this:
public void DoSomething() {
Click(this, "foo");
}
//Instead of this:
public void DoSomething() {
if (Click != null) // Unnecessary!
Click(this, "foo");
}
( 編集する。 私はこのポストからそれを得た C#の隠し機能? )
関連
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] JavaScriptやデバッグでDOMノード上のイベントリスナーを見つけるには?
-
[解決済み] jQueryでオブジェクトに登録されたイベントハンドラを検索する
-
[解決済み] あるイベントからすべてのイベントハンドラを削除する方法
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
-
[解決済み】C#のイベントとスレッドセーフについて
-
[解決済み】C#でイベントとイベントハンドラを理解する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】OnCollisionEnter2Dが実行されない?
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] 2つのリストを結合する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である
-
[解決済み] C#のデリゲートによるオブザーバ/オブザーバブルの超簡単な例
-
[解決済み] イベント宣言時に匿名の空のデリゲートを追加することのデメリットはありますか?