1. ホーム
  2. c#

[解決済み] イベントAction<>とイベントEventHandler<>の比較

2022-04-23 03:04:43

質問

を宣言するのとでは、何か違いがあるのでしょうか? event Action<>event EventHandler<> .

実際にイベントを発生させたオブジェクトは関係ないとして。

例えば

public event Action<bool, int, Blah> DiagnosticsEvent;

public event EventHandler<DiagnosticsArgs> DiagnosticsEvent;

class DiagnosticsArgs : EventArgs
{
    public DiagnosticsArgs(bool b, int i, Blah bl)
    {...}
    ...
}

の使い方は、どちらもほぼ同じです。

obj.DiagnosticsEvent += HandleDiagnosticsEvent;

については、いくつか気になる点があります。 event EventHandler<> パターンです。

  • から派生した余分な型宣言 イベントアーグス
  • オブジェクトのソースを強制的に渡す 誰も気にしないことが多い

コードが増えるということは、明確な利点がないのにメンテナンスするコードが増えるということです。

その結果、私は event Action<>

ただし、Action<>の型引数が多すぎる場合のみ、追加のクラスが必要になります。

解決方法は?

主な違いは Action<> あなたのイベントは、システム内の事実上他のイベントのデザインパターンに従わないので、私は欠点だと考えています。

支配的なデザインパターンの利点は、(同一性の力とは別に)デザインパターンを拡張することができることです。 EventArgs オブジェクトに新しいプロパティを追加しても、イベントのシグネチャを変更する必要はありません。これは、もしあなたが Action<SomeClassWithProperties> しかし、その場合、通常のアプローチを使用しないことの意味がよくわからないのです。