0

この状況は私にとって非常に興味深いものに思えます。

C# では、イベントを発生させる前に、クラスにイベントのリスナーがあるかどうかを確認する必要があります。

C# のイベント構造は、使いやすさのために、Observer オブザーバブル パターンの非標準 (Microsoft が行ったことを意味する) 実装であると仮定します。

なぜ彼らはその構造の中でこれを実装しなかったのですか? この選択について確固たる理由や文書はありますか。

null チェックを行う必要があるのか​​、それとも、すべての状況で null チェックを必要とするイベント構造についての私の仮定が間違っているのでしょうか。

これは、Microsoft によるこの実装の選択に対する答えを探す好奇心に満ちた質問です。これにより、デリゲートとイベント キーワードの内部構造の理解が深まると思います。

4

3 に答える 3

3

はい、nullチェックを行う必要があります。

デリゲートを呼び出すと、null結果はNullReferenceException.

null 以外の空のイベント ハンドラーを使用してすべてのデリゲートを初期化したくなるかもしれません。nullただし、 CPU 使用率、メモリ使用率、およびコード行の点で、これは のテストよりもはるかに悪い結果になります。

于 2014-03-13T09:01:58.283 に答える
0

デフォルトのイベントリスナーを追加できるため、null チェックを回避できます

public Action<object, EventArgs> SomeEvent = (o, e) => { };

そうすれば、デフォルト (空の実装) リスナーが含まれているため、null をチェックせずに SomeEvent を呼び出すことができます。パフォーマンスを損なう可能性があることに注意してください。

于 2014-03-13T09:06:46.560 に答える