繁体   English   中英

使用反射在属性集方法中插入代码.Net

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM