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

4

我不知道这是否可能。我正在尝试在属性被设置时运行一段自定义代码,我正在使用反射在运行时进行此操作。我无法想出一种在设置值时运行自定义代码的方法。

我可以获取设置MethodInfo的引用,但我不知道这是否是正确的方法。

就像我说的那样,我甚至不确定这是否可能。

  PropertyInfo[] pInfos = this.GetType().GetProperties();

  MethodInfo mInfo = pInfos[0].GetSetMethod();

我想要做的是创建一个基础对象,它可以将属性更改事件附加到具有自定义属性的每个属性上。而不需要在实现基础对象的每个类上手动设置setter方法。当设置属性值时,该事件将触发属性更改。


使用反射是不可能实现这个的。您能描述一下您想完成的最终任务吗? - Dennis
而且你没有访问源代码进行适当更改的权限吗? - DavidG
你想使用反射设置一个属性吗? - faby
1个回答

1
看起来最好的方法是使用装饰器模式包装目标类。假设您要包装的类是第三方类,您没有其源代码。然后,您可以包装您感兴趣的setter,并在设置属性时在包装类上引发事件。
您可以查看PostSharp,它使用AOP的概念,并可以在编译时自动为您实现此功能。警告:尽管这可能解决您今天的问题,但未来维护时可能会导致头痛,因为开发人员可能会发现像魔术一样发生的事情。
WPF中还有一个名为INotifyPropertyChanged的接口可能会有所帮助。这是我之前提到的相同模式,允许您在属性更改时引发事件。此外,这使您有机会仅在更改值而不是每次调用setter时触发事件。

个人而言,我更喜欢需要显式代码的解决方案(即INotifyPropertyChanged解决方案)。虽然这会在每个setter中重复代码,但意图是明确的,当你遇到规则的例外情况(即不想触发事件),你不必想出一个复杂的机制来解决你的通用解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接