В C# можно установить ограничения на события?

Я хочу ограничить типы, которые могут подписаться на определенное событие на основе реализуемого ими интерфейса.

Т.е. я хочу, чтобы объект "Employee", реализующий IPerson, мог подписаться на обработчик события, но другой объект "Truck", реализующий совершенно другой интерфейс, был ограничен. Из коробки любой объект, реализующий правильный шаблон метода, может подписаться.

Как мне ограничить это?

Причина, по которой я спрашиваю, заключается в том, что я реализую модель Observer, но пытаюсь сделать это с помощью C# Events. У меня есть пример, похожий на то, что MSDN предлагает здесь.

Однако меня беспокоит то, что ЛЮБОЙ объект с ЛЮБОЙ структурой (при условии, что он содержит соответствующий метод делегата) может быть выполнен при срабатывании события. Так что в моем примере выше сотрудник может реализовать метод, который имеет смысл для объектов в моем примере, но затем любой может пойти и создать другой класс - "грузовик" в моем примере выше, с любой структурой (пока он снова реализует метод) и привязаться к событию субъекта... Это определенно больше похоже на беспокойство по поводу использования объектов и хорошего дизайна, и, возможно, я придираюсь, но это меня беспокоит.

7
задан svick 25 October 2011 в 16:31
поделиться