C# 如何通知客户';我的父类的子类属性更改了吗?

C# 如何通知客户';我的父类的子类属性更改了吗?,c#,propertychanged,C#,Propertychanged,我正在写一个图书馆,我的客户正在使用我的图书馆 我的客户机创建从我的基类派生的自己的类 public class BaseClass { protected string name; private void NameChanged() { ... } public void SetName(string value) { this.name = value; this.NameChanged(

我正在写一个图书馆,我的客户正在使用我的图书馆

我的客户机创建从我的基类派生的自己的类

public class BaseClass
{
    protected string name;

    private void NameChanged()
    {
         ...
    }

    public void SetName(string value)
    {
        this.name = value;
        this.NameChanged();
    }
}
我是否可以检测到客户端的类属性已更改

我不希望我的客户实现INotifyPropertyChanged

我还将反射用于其他目的。为什么反射无法检测属性更改状态

我的库代码:

public class BaseClass
{
    public void ChildPropertyChanged(propinfo...)
    {
        ...
    }
}
客户代码:

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

您的客户机必须协作,这意味着他们必须编写代码来帮助您捕获属性的更改,如INotifyPropertyChanged客户机(实现者)必须引发事件(RaisePropertyChanged)

如果你仔细想想,如果你所要求的是可能的,那么INotifyPropertyChanged是没有必要的

一种可能的解决方案是在基类中定义一个事件,并引导客户机在其属性getter中引发它,或者更好的方法是调用基类处理程序方法。

您可以实现该模式

基类

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

更改属性,但是类不应该知道子类。客户端不会重写我的方法。是的,客户端可以放很多东西,但通常这些类不仅仅是复杂的属性,可能还有一些方法。我怎么知道在派生类中将实现什么呢?这是不可能的。他们将添加自己的属性,而您无法控制它?如果是,则不确定是否可以不使用
INotifyPropertyChanged
。写一个
PropertyChanged
事件,并要求他们在必要时使用前后值或
EventArgs
的某些内容来引发它。我很好奇,有没有一种方法可以在没有INotifyPropertyChanged的情况下实现它?