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

Я часто пишу этот код:

    private int _operationalPlan;
    public int OperationalPlan
    {
        get
        {
            return _operationalPlan;
        }
        set
        {
            _operationalPlan = value;
            RaisePropertyChanged();
        }
    }

    private void RaisePropertyChanged()
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new
                                      PropertyChangedEventArgs("PlansSelected"));
        }
    }

Мне интересно, можно ли написать атрибут, который можно добавить к свойству, чтобы автоматически вызвать событие. т.е. что-то вроде этого:

[RaiseOnSet("ProperyChanged", "PropertyChangedEventArgs", "PlansSelected")]
public int OperationalPlan
{
    get
    {
        return _operationalPlan;
    }
    set
    {
        _operationalPlan = value;
        RaisePropertyChanged();
    }
}

Прежде чем я пойду и попытаюсь реализовать это, мне было интересно:

  • Это средство в .net framework
  • Кто-нибудь пробовал это заведение
  • Если это возможно
  • Если есть какие-то тупики, которых я должен избегать

person Ed Sykes    schedule 11.06.2009    source источник


Ответы (2)


arrow_upward
5
arrow_downward

Для этого вам понадобится среда АОП для .NET, например PostSharp или AOP.NET

person Philippe Leybaert    schedule 11.06.2009

arrow_upward
0
arrow_downward

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

Другой способ - использовать вспомогательный тип, см. WPF и WF, использующие (другой) DependencyProperty для этого. Но вы не получаете автоматически реализованные свойства.

person Richard    schedule 11.06.2009