Теоретически: делегаты переданы конструктору - PullRequest
0 голосов
/ 08 февраля 2011

Поэтому мне было интересно, возможно ли что-то подобное:

Я - программа, я собираюсь создать экземпляр одного из моих объектов.Я запускаю событие, сообщая всем подписчикам, что я собираюсь создать объект.В рамках этого события я прохожу через Hashtable, который позже передам в конструктор моего объекта.

Подписчики смогут изменить этот Hashtable да?Они могли бы добавить записи для типа делегата с делегатом этого типа в качестве значения?Как только подписчик заканчивает свою работу, событие перед созданием завершается.Будут ли изменения, внесенные в Hashtable, представлены в объекте, вызвавшем событие?Итак, если этот Hashtable был передан в конструктор объекта, этот объект потенциально может содержать методы из внешнего источника?

Так что по существу -

Перейти к созданию объекта
Пожарная запрос делегатасобытие
Использовать хеш-таблицу делегата, модифицированную по событию, в конструкторе объекта
Объект использует методы из хеш-таблицы вместо собственного, если существует делегат того же типа
Теперь объект снова выполняет пользовательский код для стандартных функций

СноваЯ действительно не знаю, возможно ли то, что я говорю, или имеет смысл.

1 Ответ

1 голос
/ 08 февраля 2011

Возможно, но я бы не рекомендовал отправлять HashSet<T> открыто. Причина в том, что любой подписчик может изменить значения в HashSet<T>.

Вместо этого я не знаю, что событие - это правильный курс действий здесь. Я бы все еще использовал делегатов, но я бы не выставлял их как события. Шаблон pub / sub здесь может быть лучше (где объект, который хочет получить уведомление, будет передавать делегат через методы Sub / Unsub).

Это позволяет вам изменить сигнатуру делегата, чтобы реализация возвращала вам значения данных при выполнении вызова (вместо передачи HashSet<T>).

Затем, вместо того, чтобы просто сделать один вызов, вы бы позвонили GetInvocationList, чтобы получить каждого отдельного делегата. Затем вы должны выполнить цикл и собрать возвращаемые значения.

С этого момента вы должны соответствующим образом агрегировать значения, а затем передавать их в конструктор ваших объектов.

...