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的情况下实现它?