我有许多共享一个公共基类的对象,我希望拦截所有设置属性值的调用,并记录这些值是否已在每个实例的基础上设置。
我可以用反射替换运行时属性的 Set 方法吗?
一种方法是使属性成为虚拟的,并在运行时通过反射发射创建一个子类来覆盖属性,添加您的代码。然而,这是高级的,并且要求您始终确保创建子类(因此代码中没有“新”)。
然而;我想知道简单地实现 INotifyPropertyChanged 并处理事件是否更简单。另一种选择是首先将处理构建到常规类中。有一些方法可以减少重复,特别是如果您有一个公共基类,您可以在其中添加一个
protected void SetField<T>(ref T field, T value)
{
if(!EqualityComparer<T>.Default.Equals(field,value))
{
field = value;
// extra code here
}
}
With
private int foo;
public int Foo {
get { return foo; }
set { SetField(ref foo, value); }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)