Как уведомить клиентские изменения свойств дочерних классов от моего родительского класса?

Я пишу библиотеку и мои клиенты, используя мою библиотеку.

Мои клиенты создают собственные классы, полученные из моего базового класса.

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

Я не хочу, чтобы мои клиенты реализовали INotifyPropertyChanged.

Я также использую отражение для других целей. Почему рефлексия не может обнаружить свойства, меняющие статус

Код моей библиотеки:

public class BaseClass
{
    public void ChildPropertyChanged(propinfo...)
    {
        ...
    }
}

Код клиента:

public class MyClass : BaseClass
{
    public string Name {get;set;}
}

2 ответа

Ваши клиенты должны сотрудничать, то есть им придется писать код, чтобы помочь вам отследить изменение свойств, как в INotifyPropertyChanged клиенты (реализаторы) должны вызывать событие (RaisePropertyChanged);

Если вы думаете об этом, если то, что вы спрашиваете, было возможно, тогда INotifyPropertyChanged не было необходимости..

Одним из возможных решений для вас является определение события в базовом классе и указание вашим клиентам вызывать его в методах получения их свойств или, что еще лучше, - вызывать метод обработчика базового класса.

Вы можете реализовать шаблон шаблона.

Базовый класс.

public class BaseClass
{
    protected string name;

    private void NameChanged()
    {
         ...
    }

    public void SetName(string value)
    {
        this.name = value;
        this.NameChanged();
    }
}

Производный класс:

public class MyClass : BaseClass
{
    public string Name 
    {
        get 
        {
            return this.name; 
        }

        set 
        {
            this.SetName(value);
        }
    }
}

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

Другие вопросы по тегам