Один из подходов состоит в том, чтобы сделать свойство виртуальным и во время выполнения создать подкласс с помощью рефлексии-emit, который переопределяет свойства, добавляя ваш код. Тем не менее, это сложный процесс, требующий от вас всегда создавать подкласс (поэтому в коде нет «нового»).
Тем не менее, Интересно, проще ли реализовать INotifyPropertyChanged и обработать событие? Другой вариант - просто встроить обработку в обычный класс. Есть несколько способов сделать это менее повторяющимся, особенно если у вас есть общий базовый класс, где вы можете добавить
protected void SetField<T>(ref T field, T value)
{
if(!EqualityComparer<T>.Default.Equals(field,value))
{
field = value;
// extra code here
}
}
С
private int foo;
public int Foo {
get { return foo; }
set { SetField(ref foo, value); }
}