Предположим, я хочу создать набор наблюдателей на основе типа. То есть, когда им сообщают о событии, им сообщают тип одного из аргументов, а затем решает, следует ли действовать в зависимости от того, может ли он работать с этим типом.
Есть ли простые способы сделать это? Я подумал, что это будет довольно просто сделать с дженериками, но, похоже, это оказалось сложнее, чем я себе представлял. И я бы предпочел не иметь дело с приведением нескольких ссылок на объект, если я могу избежать этого.
То, где я застреваю, заключается в следующем:
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;
}
}
Конечно, я мог бы также сделать Предмет общим, но тогда я должен был бы иметь отдельный Предмет для каждого типа. У кого-нибудь есть совет? Есть ли какая-то часть функциональности, которую я где-то упускаю или я это слишком усложняю?
ОБНОВЛЕНИЕ : Я упростил аргументы, которые принимают Notify и NotifyDelegate. Вместо этого:
public delegate void NotifyDelegate<T>(NotifyArgs na);
Я действительно хочу сделать что-то вроде этого:
public delegate void NotifyDelegate<T>(IEnumerator<T> loadable, NotifyArgs na);
То, что я в основном пытаюсь передать взад и вперед, это данные из базы данных. Извините, если предыдущий пример кода кого-то смутил.