タイプに基づいてオブザーバーのセットを作成するとします。つまり、イベントが通知されると、引数の1つのタイプが通知され、そのタイプで動作できるかどうかに基づいて動作するかどうかが決定されます。
これを行う簡単な方法はありますか?これはジェネリックで行うのはかなり簡単だと思いましたが、それは私が想像していたよりも難しいことが判明しているようです。そして、それを避けることができれば、オブジェクトへの参照の束をキャストすることに対処する必要はありません。
私が立ち往生しているのは、これを行うことです:
public delegate void NotifyDelegate<T>(IEnumerator<T> loadable, NotifyArgs na);
interface IObserver
{
void Notify<T>(IEnumerator<T> loadable, NotifyArgs na);
}
class Subject
{
NotifyDelegate notifier; //won't compile: needs type args
void Register(IObserver o)
{
notifier += o.Notify;
}
}
もちろん、Subjectを汎用にすることもできますが、その場合は、タイプごとに個別のSubjectを用意する必要があります。ここで誰かアドバイスはありますか?どこかに欠けている機能がありますか、それともこれを複雑にしすぎていますか?
更新:NotifyとNotifyDelegateが取る引数を単純化しすぎました。これの代わりに:
public delegate void NotifyDelegate<T>(NotifyArgs na);
私は実際にこのようなことをしたいと思っています:
public delegate void NotifyDelegate<T>(IEnumerator<T> loadable, NotifyArgs na);
私が基本的に行き来しようとしているのは、データベースからのデータです。前のコードサンプルが誰かを混乱させた場合は申し訳ありません。