我编写了一个抽象类,用于自动化大量的INotifyPropertyChanged和IDataErrorInfo。但是,这需要我指定一个自定义的getter / setter,它为每个属性调用一个自定义方法。
为了避免额外输入,我一直试图找到一种方法来覆盖/处理对象中的属性getter / setter,并调用自定义方法而不是生成的getter / setter。
我尝试从DynamicObject继承并重写TryGetMember和TrySetMember,但是如果将对象声明为动态,这些方法似乎只能起作用。
所以我想通过.NET反射或其他一些机制知道我想要实现的是什么,无论如何还要检测属性setter / getter是否已在代码中定义?
谢谢, 亚历克斯。
答案 0 :(得分:3)
您可以使用Type.GetProperties方法获取有关类型属性的信息。您将收到PropertyInfo个对象的集合。这些对象具有CanRead
和CanWrite
属性,表示属性是否可读/可写。
要覆盖此行为,您必须:
对于免费解决方案,您最好使用Castle DynamicProxy。如果您准备花一些钱,请查看已经实现了许多类似性质的PostSharp。像INotifyProperty chage,undo / redo等。您还可以查看支持方面编织的任何AOP框架,但DynamicProxy将是我所描述的情况的选择。