如何从我的父类通知客户端的子类属性更改?

时间:2014-01-05 13:42:57

标签: c# propertychanged

我正在使用我的库来编写库和我的客户。

我的客户端创建了自己的基类派生类。

我可以检测到我的客户端的类属性已更改吗?

我不希望我的客户实现INotifyPropertyChanged。

我也将反射用于其他目的。为什么反射无法检测属性变化状态?

我的图书馆代码:

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

客户代码:

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

2 个答案:

答案 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来更改它。