Обертка над INotifyPropertyChanged - C#

Узнай цену своей работы

Формулировка задачи:

Я пытаюсь написать (если это возможно) обертку над INotifyPropertyChanged. Просто во первых при его реализации в классах приходится писать как минимум две лишние строки (событие и функцию инвокер), а во вторых зачастую свойства (во всяком случае у меня) автореализуемые и влом писать для каждого свойства приватное поле и геттер с сеттером только ради INotifyPropertyChanged. Я не уверен получится ли, но пытаюсь написать такую логику. Во первых класс заместо интерфейса. Таким образом не придется реализовывать лишние строки в производном классе. Во вторых атрибут для свойств который будет помечать что им нужно встроить инвок в сеттер и добавить приватное поле. Вот тут основная сложность. Можно ли как то атрибутом добавить классу поле??? Т.е. как то через рефлексию получить имя свойства над которым атрибут установлен был и добавить в класс поле с таким же именем (ну плюс там знак подчеркивания например '_') и как то добавить этому свойству в геттер и сеттер получение и установку поля и вызов события. Вот что я начал, какие будут мысли? Это вообще реально сделать?
public class NotifyPropertyChanged : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
 
    public void OnPropertyChanged(string pname) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pname));
}
 
[AttributeUsage(AttributeTargets.Property)]
public class NPChangedAttribute : Attribute
{
    public NPChangedAttribute()
    {
        var t = GetType();
 
        // Тут что то...
    }
}

Решение задачи: «Обертка над INotifyPropertyChanged»

textual
Листинг программы
this.SomePropertyChanged.Raise(() => this.Now);
this.SomePropertyChanged.Raise(() => this.Age, () => this.Weight);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5