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

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

    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)


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

person Philippe Leybaert    schedule 11.06.2009

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

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

person Richard    schedule 11.06.2009