说,我写了一个课 ClassA 。它运作良好,直到有一天我希望监控属性值的变化并对变化作出反应。最快的方法是什么?
我能想到的一种方法:让 ClassA 继承INotifyPropertyChanged,并修改属性getter / setter以触发PropertyChanged事件,并在事件触发时执行某些操作。
但如果 ClassA 有10个要监控的属性,这可能意味着改变了代码。
是否还有更好的包装或修改 ClassA 的方法,以便我可以连接一些反应逻辑?
幻想:属性能做到吗?也许完全是胡说八道,我写了一个属性,我只需要将这个属性添加到我想监视的属性中。它比添加/修改getter / setter更好。
答案 0 :(得分:1)
你可能想要研究的是使用AOP(面向方面编程)简而言之,你可以做的是在类方法和属性周围放置一个包装器,并在调用之前和之后做出反应。
在包装器类中,你将有类似这样的东西
Invoke(Args[] Args, Aspect Aspect)
{
//Do something like monitor something here
Aspect.Invoke //execution of method or property
//Do other stuff here... maybe more monitoring
}
关于这一点的美丽是关注点的分离。在您的ClassA中,您的代码可以继续专注于之前关注的任何内容,而无需担心监控代码。包装器处理监视。
参考资料:
有关AOP的更多信息 http://en.wikipedia.org/wiki/Aspect-oriented_programming
可用于在应用程序中实现AOP的C#库。 城堡项目/动态代理 http://www.castleproject.org/projects/dynamicproxy