我正在使用我的库来编写库和我的客户。
我的客户端创建了自己的基类派生类。
我可以检测到我的客户端的类属性已更改吗?
我不希望我的客户实现INotifyPropertyChanged。
我也将反射用于其他目的。为什么反射无法检测属性变化状态?
我的图书馆代码:
public class BaseClass
{
public void ChildPropertyChanged(propinfo...)
{
...
}
}
客户代码:
public class MyClass : BaseClass
{
public string Name {get;set;}
}
答案 0 :(得分:0)
您的客户必须协作,这意味着他们必须编写代码来帮助您捕获属性的更改,因为在INotifyPropertyChanged客户端(实现者)必须引发事件(RaisePropertyChanged);
如果您考虑一下,如果您提出的问题是可能的,那么就不需要INotifyPropertyChanged ..
一种可能的解决方案是在基类中定义一个事件,引导客户端在其属性getter中引发它,甚至更好 - 调用基类处理程序方法。
答案 1 :(得分:0)
您可以实施template模式。
基础课程。
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
来更改它。