1

そのクラスの複数のオブジェクトを作成している C# クラスがあります。

現在、そのクラスのすべてのオブジェクトが操作を実行する必要がある 1 つのイベントがあります (つまり、そのイベントのすべてのオブジェクトの特定の関数を呼び出す必要があります)。

イベントはクラスの外部です。

イベントは、他のクラス B またはクラス C の外部入力からデータを受信したときに発生し、そのデータをメソッドまたはイベントを使用してクラス A のすべてのオブジェクトに送信する必要があります。

クラス A の複数のクラス B/C/D からイベントを発生させる必要があります。

4

1 に答える 1

2

これを処理する最新のクリーンな方法は、Reactive Extensions を使用することです。

イベント引数のタイプが であるとしますEArg

Subject<EArg>クラス A にstatic を配置します。

private static readonly Subject<EArg> subject = new Subject<EArg>();

A の各インスタンスはこれを観察しIObservable<T>、それに基づいて行動できます。

public ClassA()    // Constructor
{
   subject.Subscribe(HandleEvent);
}

private void HandleEvent(EArg arg)
{
   // ... 
}

外部クラスが (おそらくクラス A の静的メソッドを介して) メソッドを呼び出すと、クラス A のOnNextすべてのインスタンスがそれに応答できます。

public static void RaiseEvent(EArg arg)
{
   subject.OnNext(arg);
}

基本的に、pub-sub メカニズムを探しており、Reactive Extensions はそれを実現するための最もクリーンな方法です。

注意: を外部に公開しないSubjectでください。たとえば、Why are Subjects not recommended in .NET Reactive Extensions? を参照してください。

于 2015-10-08T04:33:20.467 に答える