Декораторы и виртуальные методы - PullRequest
2 голосов
/ 23 марта 2009

Шаблон дизайна декоратора - очень хорошее решение для расширения функциональности класса. Например, если я хочу использовать методы предварительной и последующей обработки в существующем методе класса, я могу создать декоратор и переопределить существующий метод в базовом классе и вызвать мои методы предварительной и последующей обработки соответственно.

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

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

Ответы [ 2 ]

1 голос
/ 23 марта 2009

задумывались ли вы об использовании аспектов (АОП)? -Добавлено после того, как вы написали комментарий: Вы можете взглянуть на проект log4postsharp и посмотреть, как они используют атрибуты метода. Log4PostSharp

Если вы скомпилируете и откроете dll с помощью f.ex Reflector, вы увидите, что до и после действия добавляются во время выполнения.

-такое поведение также можно добавить с помощью xml-configs

0 голосов
/ 26 марта 2009

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

...