Supposons que je souhaite créer un ensemble d'observateurs en fonction du type. C'est-à-dire, quand ils sont notifiés d'un événement, on leur dit le type de l'un des arguments et décide ensuite s'il faut agir sur la base s'il peut fonctionner sur ce type.C# Observateurs basés sur le type?
Existe-t-il des moyens simples de le faire? Je pensais que ce serait assez simple à faire avec les génériques, mais cela semble être plus difficile que je ne l'imaginais. Et je préférerais ne pas avoir à faire un tas de références à l'objet si je peux l'éviter.
Là où je suis coincé est en se faisant:
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;
}
}
Bien sûr, je pourrais faire le sujet générique aussi bien, mais je dois avoir un sujet distinct pour chaque type. Est-ce que quelqu'un a des conseils ici? Y a-t-il un élément de fonctionnalité qui me manque quelque part ou suis-je trop compliqué?
MISE À JOUR: J'ai trop simplifié les arguments que Notify et NotifyDelegate prennent. Au lieu de cela:
public delegate void NotifyDelegate<T>(NotifyArgs na);
Je voulais vraiment faire quelque chose comme ceci:
public delegate void NotifyDelegate<T>(IEnumerator<T> loadable, NotifyArgs na);
Ce que je suis fondamentalement essayer de passer avant et en arrière est une base de données à partir des données. Désolé si l'exemple de code précédent a dérouté quelqu'un.
idée intéressante . C'est un peu plus compliqué que ce que je veux implémenter, mais au moins, il semble que ça marchera si je ne peux pas trouver un moyen plus simple. –