none
Как обработать изменения любого свойства класса? RRS feed

  • Вопрос

  • Коллеги!

    Создал базовый класс, от которого наследуються все другие классы. В классе определил свойствоme Modified { get; set; }

    Необходимо при изменении любого свойства в наследуемых классах изменять это свойство на текущую дату.

    Понимаю, что ответ простой, но не могу нигде найти примера. 

    Заранее спасибо!

    22 февраля 2012 г. 11:02

Ответы

  • Автоматически, в общем случае - никак.

    Можно попробовать:

    • руками вызывать что-то вроде SetModificationDate() в сеттерах всех свойств. Много ручного кода, но самый дешевый вариант если классов не слишком много (можно сделать стандартный сниппет для свойства, и кодить через него).
    • унаследовать базовый класс от MarshalByRefObject и генерировать обертки поверх всех объектов любым AOP-фреймворком (например, через Unity). Медленно, и немного неудобно.
    • использовать PostSharp (http://www.sharpcrafters.com/). Основной минус - выполняться будет уже не ваш код, а результат реврайта его постшарпом.
    • Помечено в качестве ответа MrSena 22 февраля 2012 г. 12:40
    22 февраля 2012 г. 11:31

Все ответы

  • Автоматически, в общем случае - никак.

    Можно попробовать:

    • руками вызывать что-то вроде SetModificationDate() в сеттерах всех свойств. Много ручного кода, но самый дешевый вариант если классов не слишком много (можно сделать стандартный сниппет для свойства, и кодить через него).
    • унаследовать базовый класс от MarshalByRefObject и генерировать обертки поверх всех объектов любым AOP-фреймворком (например, через Unity). Медленно, и немного неудобно.
    • использовать PostSharp (http://www.sharpcrafters.com/). Основной минус - выполняться будет уже не ваш код, а результат реврайта его постшарпом.
    • Помечено в качестве ответа MrSena 22 февраля 2012 г. 12:40
    22 февраля 2012 г. 11:31
  • Спасибо. Про сеттеры вариант очевидный, но не совсем удобный.

    Второй и третий варианты слишком сложные для этой задачи. Через год уже можно будет запутаться как оно работает...

    Надеялся, что есть что от более автоматическое.

    22 февраля 2012 г. 12:03
  • К сожаление, ничего более автоматического нет.

    Посмотрите на вариант с PostSharp-ом, возможно это наиболее подходящий вариант.

    INotifyPropertyChanged made easier using PostSharp


    Для связи [mail]

    22 февраля 2012 г. 12:20
    Модератор
  • Похоже, что это максимально подходящий. Спасибо!
    22 февраля 2012 г. 12:40