Как уведомить клиентские изменения свойств дочерних классов от моего родительского класса?
Я пишу библиотеку и мои клиенты, используя мою библиотеку.
Мои клиенты создают собственные классы, полученные из моего базового класса.
Могу ли я обнаружить, что свойство класса моего клиента изменилось?
Я не хочу, чтобы мои клиенты реализовали 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
,