これを処理する最新のクリーンな方法は、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? を参照してください。