![](/img/trans.png)
[英]use .NET reflection to know if a method is not a set property and not from a base class
[英]Using reflection to insert code in a property set method .Net
我不知道这是否可能。 我试图在设置属性时运行一段自定义代码,我试图在运行时使用反射来执行此操作。 设置值时,我无法找到运行一段自定义代码的方法。
我可以获得对集合MethodInfo
的引用,但我不知道这是否是正确的方法。
正如我所说,我什至不确定这是否可能。
PropertyInfo[] pInfos = this.GetType().GetProperties();
MethodInfo mInfo = pInfos[0].GetSetMethod();
我想做的是有一个基础 object 可以将属性更改事件附加到每个具有自定义属性的属性。 无需在实现基本 object 的每个 class 上手动设置设置方法。 然后,该事件将在设置属性值时触发更改的属性。
听起来您最好使用装饰器模式包装目标 class 。 假设您要包装的 class 是您没有源代码的第 3 方 class。 然后,您可以包装您感兴趣的设置器,并在设置属性时在包装 class 上引发一个事件。
你可以看看PostSharp ,它使用了 AOP 的概念,并且可以在编译时自动为你实现这个功能。 警告:虽然这可能会解决您今天的问题,但它可能会为将来的维护带来麻烦,因为开发人员可能会发现事情发生的时候就像魔术一样。
WPF 中还有一个名为INotifyPropertyChanged的接口可能会有所帮助。 这与我之前提到的模式相同,允许您在属性更改时引发事件。 另外,这使您有机会仅在值更改时触发事件,而不是在每次调用 setter 时触发。
我个人更喜欢任何需要显式代码的解决方案(即 INotifyPropertyChanged 解决方案)。 尽管每个 setter 中都会重复代码,但意图是明确的,当您遇到规则的异常时(您不希望触发事件),您不必想出一个复杂的机制来解决您的包罗万象的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.