假设我想根据类型创建一组观察者。也就是说,当他们被通知一个事件时,他们被告知其中一个参数的类型,然后根据它是否可以对该类型进行操作来决定是否采取行动。
有什么简单的方法可以做到这一点吗?我认为这对泛型来说相当简单,但这似乎比我想象的要难。如果可以避免的话,我宁愿不必处理对对象的一堆引用。
我陷入困境的地方是这样做:
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);
我基本上试图来回传递的是来自数据库的数据。抱歉,如果前面的代码示例让任何人感到困惑。